Vim中Golang的导入和删除命令缩写

Vim中Golang的导入和删除命令缩写,vim,go,Vim,Go,我已经使用Vim编写了一个月的Go脚本,当涉及到导入和取消导入任何包时,我非常熟悉:Import和:DropVim命令 然而,我已经越来越厌倦了频繁地输入包含大写字母的这么长的单词,所以我开始想,如果我能使用:I和:d而不是:Import和:Drop,我会更加满意。但是,我不确定是否可以在Vim中定义这样的命令,因为它涉及1)转换为命令行模式,2)获取在键入时动态确定的变量 例如,如果我导入encoding/csv包,我只想输入:I encoding/csv,等等。。。我可以定义这些命令吗 我偶

我已经使用Vim编写了一个月的Go脚本,当涉及到导入和取消导入任何包时,我非常熟悉
:Import
:Drop
Vim命令

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

例如,如果我导入
encoding/csv
包,我只想输入
:I encoding/csv
,等等。。。我可以定义这些命令吗

我偶然发现了这个问题,但我不知道它在做什么,也不知道答案是否适用于这个问题。我是否可以通过将链接帖子上的
w
w
全部替换为
I
d
来解决此问题

另外,它是否与不使用变量(例如,
Fmt
command来格式化脚本)的情况有所不同

谢谢。

编辑2:正如下面所指出的,最好使用中所指出的

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

在vim 7.3上工作,Ubuntu 64位

原始答案(更复杂):

根据:

您可以使用:command定义自己的命令,但用户定义的命令必须以大写字母开头,以避免与内置命令混淆

因此,使用
:command
,您可能可以使用
:I
:D
,但不能使用
:I
:D

它接着说:

假设您有一个用户定义的:E命令,要使用该命令覆盖默认的:E命令。您可以执行以下操作:

:cabbrev e=(getcmdtype()==':'&&getcmdpos()==1?'e':'e')
(getcmdtype()==':'&&getcmdpos())确保仅在命令行的第一列中进行替换(即在该行的后面,它很可能不会用作命令,也不会在搜索行中进行替换,搜索行也会受到cabbrev的影响)。
如果您经常这样做,那么定义一个函数来为您完成这项工作将非常有用。使用此选项可以快速轻松地为所需的任何命令定义小写缩写:

函数!CommandCabbr(缩写,扩展)
执行“cabbr”。a:缩写=getcmdpos()==1&&getcmdtype()==“:”?“.a:扩展。”:“.a:缩写”
端功能
命令-nargs=+CommandCabbr调用CommandCabbr()
用它来定义一个更简单的缩写词。
CommandCabbr ccab CommandCabbr
这不仅创建了函数,还提供了(小写!)命令:ccab来定义此类缩写“动态”

因此,如果您想使用小写的
:i
:d
,,使用函数看起来是一种方法。该插件允许您设置小写别名,例如:

:Alias i Import
一个简单的解决方案:

nnoremap <leader>i :Import<Space>
nnoremap <leader>d :Drop<Space>

打开wildmenu并准备好进行bing。

如果输入太多,只需使用tab completion即可:
:I
:Dr
:F
。只需使用
:cabbr I Import
是一个坏主意。它也适用于搜索命令行,也适用于键入
:s/I/x/g
之类的内容时。您应该使用默认情况下,
:cnoreabr
,而不是
:cabbr
。最好按照中的说明操作。
:cabbrev e <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'E' : 'e')<CR>
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
:Alias i Import
nnoremap <leader>i :Import<Space>
nnoremap <leader>d :Drop<Space>
:Import | <--- cursor
nnoremap <leader>i :Import <C-d>
nnoremap <leader>d :Drop <C-d>
:Import | <--- cursor
set wildcharm=<C-z>
nnoremap <leader>i :Import <C-z>
nnoremap <leader>d :Drop <C-z>
:Import firstpackagenameinthelist