比如说,我希望特定的 vim 映射仅当文件名(最好是路径)包含特定字符时才适用 --- 与文件类型无关。
能做到吗?怎么做?还是我要求太多了?
答案1
是的,您可以使用 vim 的autocmd
命令来执行此操作,方法是将以下内容放入您的.vimrc
文件中:
autocmd BufRead,BufNewFile /path/* map <buffer> <c-J> gqip
这将导致map
每当您开始编辑与模式匹配的新文件(由于事件BufNewFile
)或现有文件(由于事件BufRead
)时执行该命令。由于模式包含,/
它将与文件的整个路径匹配,如果不包含,它将仅与文件的基本名称匹配。使用命令<buffer>
的参数map
将仅将映射应用于当前缓冲区。
您可以使用它:help autocmd
来获取有关定义自动命令的其他信息,包括可用事件和受支持的模式的详细信息。
答案2
我想要一个单一的条件映射,使用 Vim 的 Symfony 插件从视图模板切换到操作并返回。我希望在映射本身中包含条件,因为我不太喜欢自动命令。
在此示例中,我将文件名(而不是完整路径)与“.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()
以了解如何获取文件名或完整路径并将其与字符串匹配。