Я предполагаю, что вы следовали 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 _.
Я не могу точно воспроизвести проблему, с которой вы столкнулись, с 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 -и сопоставлений.