Адаптивное табулирование в vim - PullRequest
8 голосов
/ 05 августа 2011

Я работаю над кодом, в котором некоторые модули используют вкладки для отступов, а другие используют пробелы.Многие текстовые редакторы, такие как Np ++, имеют своего рода адаптивную функцию табуляции, которая использует пробелы для отступа, если предыдущая строка (или блок кода) использует пробелы или табуляции в зависимости от обстоятельств.Я не видел ничего в Vim, как это.Есть ли такой плагин или настройка для этого?

Ответы [ 4 ]

4 голосов
/ 05 августа 2011

Я предпочитаю настроить свою среду, как показано в примере ниже. Я делаю общее правило замены табуляции пробелами и использую augroup, когда мне нужно переопределить это правило. Makefiles - хороший пример того, когда вам может потребоваться TABS, а файл cpp - когда вам могут потребоваться пробелы.

" A tab produces a 4-space indentation
:set softtabstop=4
:set shiftwidth=4
:set expandtab
" replace tabs with spaces unless noted otherwise

" <snip>

augroup CPPprog
   au!
   "-----------------------------------
   " GENERAL SETTINGS
   "-----------------------------------
   au BufRead,BufNewFile,BufEnter             *.cpp,*.c,*.h,*.hpp   set nolisp
   au BufRead,BufNewFile,BufEnter             *.cpp,*.c,*.h,*.hpp   set filetype=cpp
   au FileType                                *                     set nocindent smartindent
   au FileType                                *.c,*.cpp             set cindent
   au BufRead,BufNewFile,BufEnter             *.cpp                 let g:qt_syntax=1
   " turn on qt syntax highlighting (a plugin)
   au BufNewFile,BufRead,BufEnter             *.c,*.h,*.cpp,*.hpp   let c_space_errors=1
   " trailing white space and spaces before a <Tab>

   " <snip>

augroup END

" <snip>

augroup filetype
  au! BufRead,BufNewFile,BufEnter *Makefile*,*makefile*,*.mk set filetype=make
augroup END
" In Makefiles, don't expand tabs to spaces, since we need the actual tabs
autocmd FileType make set noexpandtab
1 голос
/ 05 августа 2011

Этот плагин, кажется, для достижения ваших целей. IndentConsistencyCop

Вам следует установить бесплатный плагин, который загружает соответствующие автокоманды. IndentConsistencyCopAutoCmds

0 голосов
/ 05 августа 2011

Не думаю, что в Vim есть что-то, что вам нужно. Но вы можете проверить copyindent. Смотри :h copyindent. Это дает «адаптивные табуляции», но не совсем то, что вы хотели. Ведущие вкладки / пробелы в новой строке будут копировать предыдущую строку. Однако при увеличении отступа решение о добавлении табуляции или пробелов будет зависеть от параметра expandtab. (Возможно, вы захотите взглянуть на справку для опции preserveindent, которая также должна быть включена в ваш сценарий.)

Вам также может потребоваться автоматическая настройка вкладок с помощью autoindent или smartindent. Не уверен, что вам, возможно, придется сбросить smartindent или autoindent после установки copyindent, чтобы заставить его работать должным образом (например, выполните :set nosmartindent, затем :set smartindent снова).

0 голосов
/ 05 августа 2011

Как сказал @zkhr, вы можете использовать smartindent или autoindent. Вы также можете использовать cindent, который является отступом по умолчанию, используемым vim при редактировании файлов C / C ++.

'smartindent' автоматически вставляет один дополнительный уровень отступа в некоторых случаях и работает для C-подобных файлов.

«cindent» более настраиваемый, но и более строгий, когда дело доходит до синтаксиса.

'smartindent' и 'cindent' могут мешать отступам на основе типа файла и никогда не должны использоваться вместе с ними.

Если вы редактируете конкретный файл и хотите запретить автоматический отступ в этом файле, введите:

:setlocal noautoindent
:setlocal nocindent
:setlocal nosmartindent
:setlocal indentexpr=
...