2017-07-29 93 views
3

我想在vim中设置一些自定义自动完成宏。我想这样的事情(|代表光标位置):在vim中创建替换宏的最佳方法

it<TAB>| 

立即变为:

it("|", function() { 
}); 

这可能使用直VIM,或者我需要一个插件吗?如果是这样,那里有一个首选插件吗?

+2

我会去ultisnips – dlmeetei

回答

3

使用的缩写你可以写这样的事情:

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,你会写你的网页摘要:包含的关键字snippetendsnippet之间

snippet it "your description" b 
it("$0", function() { 
}); 
endsnippet 

这里的定义。在第一行中,您可以在双引号内的字符串中描述片段的用途。如果您使用相同的选项卡触发器定义了多个片段,并且存在不明确性,它将在列表中由UltiSnips显示。

结尾b是一个选项,用于防止标签触发器it在行的开头以外的任何位置被扩展。

$0是一个tabstop,它代表您希望光标位置,一旦代码片段已完全展开。

github上的自述页面提供了一个快速入门,以及一些视频链接。

如果你想看看其他人写的片段,你可以安装vim-snippets

还有其他的片段管理者,但我不太了解他们的描述他们的片段的语法。如果你想有一个比较,这里的one,这里是其中的一些环节:

+0

非常彻底,谢谢! –

2

这里是一个abbreviation,你可以用于您的特定示例

:inoreabbrev it it("", function() {<cr>});<esc>kf"a 

打字,然后CTRL +]插入模式it将呈现

it("|", function() { 
}); 

,并让你在插入模式。

但我肯定会去ultisnips,并有一个screencast在同一页上创建片段。这就是为什么我在这里省略片段,因为你可以自己做。

相关问题