在Vim中重新映射Ex命令是否可行(将:Ack映射到:ack)?

4

我使用Vim插件ack.vim,但我不明白为什么命令是:Ack,而不是小写的:ack(需要按住shift有点烦人)。

是否可以将其重新映射为:ack


可能是重复的问题:https://dev59.com/OGs05IYBdhLWcg3wANPj - Peter Rincker
2个回答

8
内置命令以小写字符开头,自定义命令以大写字符开头。这些是规则。Vim不会允许您定义以小写字母开头的自定义命令。
如果您不喜欢这样,您可以创建一个正常模式映射:
nnoremap <leader>a :Ack<Space>

这甚至比:ack<Space>更快。


3

是的,但它并不像听起来那么简单:

cnoreabbrev <expr> ack getcmdtype() == ':' && getcmdline() ==# 'ack' ? 'Ack' : 'ack'

简而言之,vim没有提供创建小写命令的本地方式。使用映射会导致延迟,因此首选缩写词。技巧在于当缩写词应该展开时要小心,因为cabbrev 不仅在ex命令下扩展,在其他地方比如搜索时也可以扩展。这里有另一个讨论串提到了这一点。
Hari Krishna Dara创建了一个插件:cmdalias.vim,它使用了上述技术的变体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接