我用Vim来编写我的剧本去了一个月,我用很舒服:Import
和:Drop
VIM命令,当涉及到进口和unimporting的软件包。
不过,我打字这么长的单词,其中包括大写字母如此频繁,所以我来想,如果我可以使用的越来越累:i
,并:d
比其他:Import
和:Drop
,我会更满意。但是,我不确定是否可以在Vim中定义这样的命令,因为它涉及1)转换为命令行模式,以及2)接受在键入时动态确定的变量。
因此,例如,如果我导入encoding/csv
包,则我要输入的仅是:i encoding/csv
,等等...我可以定义这些命令吗?
我偶然发现了这个问题,但是我无法弄清楚它在做什么,也不知道答案是否首先适用于这个问题。我可以通过更换所有的解决这一问题w
,并W
在链接的帖子i
或d
?
另外,它与不带变量的情况(例如,Fmt
用于格式化脚本的命令)是否有所不同?
谢谢。
编辑2:正如下面的摘要所指出的,最好使用cnoreabbrev
或cnorea
如本答案所述。
更好的工作示例(粘贴到中~/.vimrc
):
cnorea <expr> i ((getcmdtype() is# ':' && getcmdline() is# 'i')?('Import'):('i'))
cnorea <expr> d ((getcmdtype() is# ':' && getcmdline() is# 'd')?('Drop'):('d'))
编辑:简单的答案。仅使用cabbrev
or ca
(命令缩写)似乎有效:
工作示例(在中粘贴~/.vimrc
):
ca i Import
ca d Drop
在vim 7.3,Ubuntu 64位上工作。
原始答案(更复杂):
根据http://vim.wikia.com/wiki/Replace_a_builtin_command_using_cabbrev:
您可以使用:command定义自己的命令,但是用户定义的命令必须以大写字母开头,以避免与内置命令混淆。
因此,使用:command
,您可能可以使用:I
and :D
,但不能使用:i
and :d
。
它继续说:
假设您有一个要使用的用户定义的:E命令,以覆盖默认的:e命令。您可以执行以下操作:
:cabbrev e <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'E' : 'e')<CR>
(getcmdtype()==':'&& getcmdpos())确保替换仅发生在命令行的第一列(即不在行的后面,在此行很可能不打算用作命令) ,并且不在搜索行上,搜索行也会受到cabbrev的影响)。
如果您经常这样做,那么定义一个函数可以为您做些有用的事情。使用此命令可以快速轻松地为所需的任何命令定义小写缩写:
function! CommandCabbr(abbreviation, expansion)
execute 'cabbr ' . a:abbreviation . ' <c-r>=getcmdpos() == 1 && getcmdtype() == ":" ? "' . a:expansion . '" : "' . a:abbreviation . '"<CR>'
endfunction
command! -nargs=+ CommandCabbr call CommandCabbr(<f-args>)
" Use it on itself to define a simpler abbreviation for itself.
CommandCabbr ccab CommandCabbr
这不仅创建函数,而且提供(小写字母!)命令:ccab来“动态”定义此类缩写。
因此,如果要使用小写:i
和,使用函数似乎是一种方法:d
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句