vim-仅当文件名包含特定字符时才使映射适用

vim-仅当文件名包含特定字符时才使映射适用

比如说,我希望特定的 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()以了解如何获取文件名或完整路径并将其与字符串匹配。

相关内容