我想在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