3 回答
编辑2:正如下面的glts所指出的,最好使用cnoreabbrev
或如cnorea
this answer中所指出的那样。
更好的工作示例(粘贴到~/.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_cabrev:
您可以使用 :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
。
cmdalias.vim - Create aliases for Vim commands插件允许您设置小写别名,例如:
:Alias i Import
一个简单的解决方案:
nnoremap <leader>i :Import<Space>
nnoremap <leader>d :Drop<Space>
在正常模式下,<leader>i
在命令行中填充
:Import | <--- cursor
准备好输入或<tab>-complete
参数。
更好的:
nnoremap <leader>i :Import <C-d>
nnoremap <leader>d :Drop <C-d>
<leader>i
填充命令行
:Import | <--- cursor
并显示可能完成的列表。
更好的是:
set wildcharm=<C-z>
nnoremap <leader>i :Import <C-z>
nnoremap <leader>d :Drop <C-z>
假设您wildmenu
已经设置,<leader>i
在命令行中填充
:Import firstpackagenameinthelist
打开wildmenu并准备好使用<tab>
bing。