Как сделать вложенный отступ в vim?

Я предполагаю, что вы следовали Debian HOWTO в https://wiki2.dovecot.org/HowTo/EximAndDovecotSASL, как и я.

В настоящее время Debian использует exim4, а exim.conf не существует, и если бы он существовал, его бы игнорировали.

причина dovecot_loginнеизвестна в том, что exim4 не подготовлен для этого :ключевые слова begin authenticatorsдолжны предшествовать ему в конфигурации. если вы используете режим конфигурации «split», что типично для более сложных установок, это можно сделать, поместив файл, возможно, с именем 05 _dovecot, в /etc/exim4/conf.d/auth, который имеет магическое заклинание в заголовке 00 _exim4 -config _.

обновление -exim4.conf будет обрабатывать файлы в папке conf.d/auth/ в лексическом порядке и будет игнорировать ранее -существующий файл «dovecot.conf» в этом каталоге (, поскольку он игнорирует любой файл с точкой в ​​нем )и см. 05 _dovecot после заголовка 00 _exim4 -config _.

0
07.11.2020, 09:09
1 ответ

Я не могу точно воспроизвести проблему, с которой вы столкнулись, с filetype=shи включенным плагином отступа -, похоже, повторно заражает fi, чтобы он соответствовал ifдля меня.

Но я вижу проблему в вашей аббревиатуре в том, что она использует <CR>в обычном режиме для перехода к следующей строке, а затем использует iдля вставки части fi. Во-первых, он рассчитывает, что эта следующая строка уже пуста (, иначе она просто добавит fiк тому, что уже есть. )Это также может быть причиной вашей проблемы,поскольку вставка в новую строку обычно не вызывает автоматический отступ, как вставка новой строки (с помощью <CR>в режиме вставки или с помощью команды )в обычном режиме o.

Я предлагаю оставить режим вставки и использовать <C-o>для выполнения одной команды нормального режима, чтобы установить метку и перейти к ней. (См. :help i_CTRL-O.)

Эта аббревиатура должна работать хорошо:

iabbrev if if<C-o>ma<CR>fi<C-o>`a

Обратите внимание, что <CR>происходит в режиме вставки, поэтому фактически вставляется новая строка, и при вставке новой строки autoindentобычно учитывается.

Если вы собираетесь устанавливать аббревиатуры для каждого типа файлов, обычно следует делать их буфером -локальным, поэтому, если у вас есть другие буферы, редактирующие разные типы файлов, они не будут применяться там. Вы можете сделать это, добавив модификатор <buffer>к команде :

.
iabbrev <buffer> if if<C-o>ma<cr>fi<C-o>`a

Затем вы можете добавить это к autocmd FileTye sh, если хотите. Если вы используете autocmd, вы, как правило, захотите сохранить его внутри augroup, поэтому, если вы снова создадите свой файл vimrc, он не будет дублировать команду auto -и запускать ее несколько раз каждый раз, когда файл тип совпадает.

Я обычно предпочитаю, чтобы механизм Vim ftplugin справился с этим за меня. Для этого просто создайте файл с именем ~/.vim/after/ftplugin/sh.vimи добавьте в него свою команду iabbrev <buffer>.... (Не добавляйте часть autocmd. )Vim будет обрабатывать их автоматически, всякий раз, когда определяется тип файла sh, он автоматически создает все эти сценарии. Это упрощает создание множества правил для определенного типа файлов. Вы также не загрязняете свой vimrc всеми специфическими правилами для типа файла -. Наконец, вам не нужно беспокоиться об экранировании этих длинных строк с помощью команд auto -и сопоставлений.

1
18.03.2021, 22:54

Теги

Похожие вопросы