缩写Vim中Golang的Import和Drop命令

时间:2013-09-21 10:13:07

标签: vim go

我已经使用Vim编写了一个月的Go脚本代码,在导入和导入任何软件包时,我对:Import:Drop vim命令很满意。

但是,我越来越厌倦了如此频繁地输入包括大写字母在内的这么长的单词,所以我开始认为如果我可以使用:i:d而不是{{ 1}}和:Import,我会更满意。但是,我不确定我是否可以在Vim中定义这样的命令,因为它涉及1)转入命令行模式,2)获取在键入时动态确定的变量。

例如,如果我导入:Drop包,我要输入的所有内容都是encoding/csv等等...我可以定义这些命令吗?

我偶然发现this question,但我无法得到它正在做的事情,我也不确定答案是否适用于这个问题。我可以通过将关联帖子中的所有:i encoding/csvw替换为Wi来解决问题吗?

此外,它是否与不采用变量(例如,d命令来格式化脚本)的情况不同?

感谢。

3 个答案:

答案 0 :(得分:2)

编辑2:正如下面glts所指出的,最好使用cnoreabbrev or 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 (command abbreviation)似乎有效:

工作示例(将其粘贴到~/.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:D,但不能使用:i:d

接着说:

  
    

假设您有一个用户定义的:E命令,您希望用它来覆盖default:e命令。您可以执行以下操作:

  
:cabbrev e <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'E' : 'e')<CR>
  
    

(getcmdtype()==':'&amp;&amp; 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,使用函数看起来就是一种方法。

答案 1 :(得分:0)

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

:Alias i Import

答案 2 :(得分: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

野性菜单打开并准备好<tab> bing。