Как мне избежать кумулятивных команд filetype в vim?
Допустим, я загружаю файл python в vim. Быстрая проверка :scriptnames
показывает, что мой ~/.vim/ftplugin/python/python.vim
файл загружается как положено. Одна из команд в этом файле выделяет все символы, которые находятся за 80-м столбцом. Теперь допустим, что я открываю файл C++ в другом буфере ~/.vim/ftplugin/cpp/cpp.vim
). Хотя новые команды выполняются, настройки в python.vim
все еще применяются; поэтому символы выделены после 80-го столбца в моем C++ файле.
Есть ли способ сделать команды типа файлов не такими кумулятивными? я имею filetype plugin indent on
в моем .vimrc
,
1 ответ
Проблема в том, что оба 'colorcolumn'
а также :match
(вы не указали, используете ли вы новый параметр или более старый подход подсветки) локально для окна, но ftplugins должен только устанавливать локальные настройки буфера.
Почему эти настройки локальные? Это позволяет отображать один и тот же буфер в двух окнах: одно с подсветкой, а другое без выделения.
Что вы можете сделать, чтобы предотвратить это?
a) Не устанавливайте это в ftplugin, а вместо этого используйте сопоставления для включения / выключения цветовой колонки.
б) поставить :setlocal nocolorcolumn
во все сценарии ftplugin (например, в ~/.vim/after/ftplugin/*.vim
) для всех типов файлов, которые вы используете. Это будет работать, только если вы не переключаетесь между разными типами файлов в одном и том же окне.
в) правильный (но самый сложный) способ решить эту проблему через пару :autocmd
на BufWinEnter
, BufWinLeave
, а также WinLeave
События.