Как определить настройки для отдельных файлов и синхронизировать их, используя git вместе с файлом? - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь создать специфичные для файла настройки в vim, поэтому, если я открою "file1", я хочу запустить ": синтаксис выключен,: показать номер", то при открытии "file2" я хочу запустить несколько другойкоманды.Таким образом, есть много файлов, для которых я хочу определить некоторые правила.Я не хочу предназначаться для файлов, используя некоторое регулярное выражение или что-нибудь.Я хочу настройки для отдельных файлов.Поэтому я думаю, что я могу сделать, это создать файл настроек для каждого файла в том же каталоге, что и файл.Поэтому, когда я синхронизирую репозиторий с git, файл настроек также синхронизируется.

Я достиг точной настройки с помощью autcmd, поместив это в .vimrc

autocmd BufReadPre,FileReadPre file1 :syntax off

Но я не хочучтобы загромождать мой файл .vimrc со всеми настройками файла.Также мне придется синхронизировать файл vimrc отдельно от папки проекта.

Итак, я прочитал этот ответ, в котором мне сказали сделать это для получения .vimrc в каталоге вашего текущего проекта из корневой папки проекта

:set exrc

Я не понял, какдля этого нужно ли запускать его каждый раз, когда я открываю файл?

Можно ли этого добиться без установки какого-либо дополнительного плагина?

1 Ответ

0 голосов
/ 18 января 2019

exrc

Опция :help 'exrc' позволяет Vim получать свою конфигурацию из текущего каталога вместо ~/.vimrc.Чтобы это работало, вам нужно открыть все файлы проекта из корневого каталога (Git).Кроме того, поскольку инициализация запускается только один раз при запуске Vim, вам все равно нужно определить :autocmd BufRead (при условии, что вы открываете более одного файла на один сеанс Vim), но, по крайней мере, теперь вы имеете их в проекте, а не во всем мире.

плагины localrc

Плагин localrc улучшает это за счет использования конфигурации (проекта или даже в области каталогов) для каждого файла, который открываетсяв дереве каталогов.Вместо :autocmd вам потребуется условное совпадение с текущим именем файла (if expand('%:t') == 'file1' ...).

Существует несколько таких плагинов;Я могу порекомендовать плагин localrc (особенно с моими собственными улучшениями ), который даже допускает локальную конфигурацию для конкретного типа файла.

modeline (плагины)

Плагин localrc работает хорошо, если у вас одинаковая конфигурация для (нескольких) наборов файлов.Если я вас правильно понимаю, у вас есть отдельные команды для отдельных файлов и небольшое дублирование.Для этого было бы неплохо :help modeline (если это нормально, добавить комментарий к файлам, то есть).К сожалению (из соображений безопасности) Vim позволяет устанавливать только опции (например, 'syntax' или 'textwidth');Вы не можете выполнять произвольные команды.Для ваших примеров команд (:syntax off, :set number) это будет работать, хотя:

/* vim: syntax= number */

modeline с составным типом файла

Если вам нужна увеличенная моделин, которая также можетвыполнив любую команду Vim или для дупликации набора настроек для более чем одного конкретного файла, вы можете определить пользовательский тип файла и установить его как составной тип файла в строке состояния, например,

# vim: set ft=c.kAndRstyle

, а затем настройте параметры в ~/.vim/ftplugin/kAndRstyle.vim.Единственным недостатком здесь является то, что вы должны явно упомянуть оригинальный синтаксис в modeline.

плагины modeline

Некоторые плагины (среди них мой плагин ModelineCommands ; некоторыеальтернативы перечислены на его странице плагина) расширить синтаксис моделин, чтобы позволить устанавливать переменные Vim или даже выполнять произвольные команды Vim, непосредственно в самой моделине.

сопутствующий Vimscript

Для истинного однозначногоВ одном сопоставлении вы можете автоматически получить файл Vimscript, который находится рядом с открытым файлом, с помощью следующей ловушки:

" Automatically source an eponymous %:r.vim or %.vim if it exists, as a
" bulked-up modeline and to provide file-specific customizations.
function! s:AutoSource()
    let l:testedScripts = [expand('<afile>') . '.vim']
    if expand('<afile>:e') !=# 'vim'    " Don't source the edited Vimscript file itself.
        call add(l:testedScripts, expand('<afile>:r') . '.vim')
    endif

    for l:filespec in l:testedScripts
        if filereadable(l:filespec)
            try
                execute 'source' fnameescape(l:filespec)
            catch /^Vim\%((\a\+)\)\=:/
                echomsg v:exception
            endtry
        endif
    endfor
endfunction
augroup AutoSource
    autocmd! BufNewFile,BufRead * nested call <SID>AutoSource()
augroup END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...