在Vim中缩写Golang的Import and Drop命令

布拉萨德:

我用Vim来编写我的剧本去了一个月,我用很舒服:Import:DropVIM命令,当涉及到进口和unimporting的软件包。

不过,我打字这么长的单词,其中包括大写字母如此频繁,所以我来想,如果我可以使用的越来越累:i,并:d比其他:Import:Drop,我会更满意。但是,我不确定是否可以在Vim中定义这样的命令,因为它涉及1)转换为命令行模式,以及2)接受在键入时动态确定的变量。

因此,例如,如果我导入encoding/csv包,则我要输入的仅是:i encoding/csv,等等...我可以定义这些命令吗?

我偶然发现了这个问题,但是我无法弄清楚它在做什么,也不知道答案是否首先适用于这个问题。我可以通过更换所有的解决这一问题w,并W在链接的帖子id

另外,它与不带变量的情况(例如,Fmt用于格式化脚本的命令)是否有所不同

谢谢。

互联网:

编辑2:正如下面摘要所指出的,最好使用cnoreabbrevcnorea本答案所述

更好的工作示例(粘贴到中~/.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_cabbrev

您可以使用: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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章