我想在vim中设置一些自定义自动完成宏。我想这样的事情(|
代表光标位置):在vim中创建替换宏的最佳方法
it<TAB>|
立即变为:
it("|", function() {
});
这可能使用直VIM,或者我需要一个插件吗?如果是这样,那里有一个首选插件吗?
我想在vim中设置一些自定义自动完成宏。我想这样的事情(|
代表光标位置):在vim中创建替换宏的最佳方法
it<TAB>|
立即变为:
it("|", function() {
});
这可能使用直VIM,或者我需要一个插件吗?如果是这样,那里有一个首选插件吗?
使用的缩写你可以写这样的事情:
inorea it it("", function() {<cr>});<c-o>k<c-o>f"
的<c-o>k<c-o>f"
在最后的目的是重新定位光标双引号内,但它可能无法正常工作的所有时间。
使用映射,你可以试试这个:
ino <expr> <tab> <sid>expand_last_word()
let s:your_expansions = {
\ 'it': '\<c-w>it(\"\", function() {\<cr>});\<c-o>k\<right>',
\ }
fu! s:expand_last_word() abort
let last_word = matchstr(getline('.'), '\v<\k+%'.col('.').'c')
return has_key(s:your_expansions, last_word)
\ ? eval('"'.s:your_expansions[last_word].'"')
\ : "\<tab>"
endfu
你将不得不添加的字典里面s:your_expansions
您的缩写和他们的扩张。
使用:read
命令,你可以定义较大的代码片段,并在几个文件分割:
ino <expr> <tab> <sid>expand_last_word()
fu! s:expand_last_word() abort
let last_word = matchstr(getline('.'), '\v<\k+%'.col('.').'c')
if last_word ==# 'it'
return "\<c-w>\<c-o>:r /path/to/some_file\<cr>\<c-o>f\"\<right>"
endif
return "\<tab>"
endfu
这里/path/to/some_file
应该包含您的代码片段:
it("", function() {
});
他们是非常简单的解决方案,如果你想要更强大的东西,你公关可靠地需要一个片段插件。其中之一是UltiSnips,它要求您的Vim版本已经使用Python支持编译(:echo has('python')
或:echo has('python3')
返回1)。
随着UltiSnips,你会写你的网页摘要:包含的关键字snippet
和endsnippet
之间
snippet it "your description" b
it("$0", function() {
});
endsnippet
这里的定义。在第一行中,您可以在双引号内的字符串中描述片段的用途。如果您使用相同的选项卡触发器定义了多个片段,并且存在不明确性,它将在列表中由UltiSnips显示。
结尾b
是一个选项,用于防止标签触发器it
在行的开头以外的任何位置被扩展。
$0
是一个tabstop,它代表您希望光标位置,一旦代码片段已完全展开。
github上的自述页面提供了一个快速入门,以及一些视频链接。
如果你想看看其他人写的片段,你可以安装vim-snippets。
还有其他的片段管理者,但我不太了解他们的描述他们的片段的语法。如果你想有一个比较,这里的one,这里是其中的一些环节:
非常彻底,谢谢! –
这里是一个abbreviation
,你可以用于您的特定示例
:inoreabbrev it it("", function() {<cr>});<esc>kf"a
打字,然后CTRL +]插入模式it
将呈现
it("|", function() {
});
,并让你在插入模式。
但我肯定会去ultisnips,并有一个screencast在同一页上创建片段。这就是为什么我在这里省略片段,因为你可以自己做。
我会去ultisnips – dlmeetei