1
4

3 回答 3

2

编辑2:正如下面的glts所指出的,最好使用cnoreabbrev或如cnoreathis answer中所指出的那样。

更好的工作示例(粘贴到~/.vimrc):

cnorea <expr> i ((getcmdtype() is# ':' && getcmdline() is# 'i')?('Import'):('i'))
cnorea <expr> d ((getcmdtype() is# ':' && getcmdline() is# 'd')?('Drop'):('d'))

编辑:简单的答案。仅使用cabbrevor 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,您可能可以使用:Iand :D,但不能使用:iand :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

于 2013-09-21T11:15:41.333 回答
0

cmdalias.vim - Create aliases for Vim commands插件允许您设置小写别名,例如:

:Alias i Import
于 2013-09-21T14:46:50.897 回答
0

一个简单的解决方案:

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。

于 2013-09-21T19:45:58.703 回答