Скажем, я хочу, чтобы конкретное отображение vim было применимо только в том случае, если имя файла (точнее, путь) содержит конкретные символы - независимо от типа файла.
Можно ли это сделать? Как? Или я слишком многого прошу?
Да, вы можете сделать это с помощью команды autocmd
vim, поместив что-то вроде следующего в ваш файл .vimrc
:
autocmd BufRead,BufNewFile /path/* map <buffer> <c-J> gqip
Это приведет к выполнению команды map
всякий раз, когда Вы начинаете редактировать новый (из-за события BufNewFile
) или существующий (из-за события BufRead
) файл, соответствующий шаблону. Поскольку шаблон содержит /
, он будет сопоставлен со всем путем к файлу, в противном случае он будет сопоставлен только с базовым именем файла. Использование аргумента <buffer>
для команды map
будет применять сопоставление только к текущему буферу.
Вы можете использовать :help autocmd
, чтобы получить дополнительную информацию по определению autocmds, включая доступные события и детали поддерживаемых шаблонов.
Я хотел, чтобы одно условное отображение переключалось с шаблона представления на действие и обратно, используя плагин Symfony для Vim. Я хотел условия в самом отображении, потому что я не очень люблю autocmd.
В этом примере я сопоставляю имя файла (не полный путь) с ".class"
" Symfony switch between action and view
nnoremap <expr> <leader>a match(expand('%:t'),'\.class') == -1 ? ':Saction<CR>' : ':Sview<CR>'
Синтаксис:
nnoremap <expr> left_hand_side right_hand_side
и сам right_hand_side должен иметь этот формат
condition ? mapping_for_when_its_true : mapping_for_when_its_false ;
оба отображения должны быть заключены в кавычки.
См. :help expand()
и :help match()
, чтобы узнать, как получить имя файла или полный путь и сопоставить его со строкой.