是否有Vim插件可以處理智能分號插入,就像Eclipse中的插件一樣?Vim智能插入分號
實施例(豎線是插入光標):
foobar(|)
I型分號:
foobar();|
類似地:
foobar("blah|")
I型分號:
foobar("blah");|
如果我想在原來的光標位置分號,我按空格鍵智能重新定位後:
foobar("hello|")
foobar("hello");|
foobar("hello;|")
是否有Vim插件可以處理智能分號插入,就像Eclipse中的插件一樣?Vim智能插入分號
實施例(豎線是插入光標):
foobar(|)
I型分號:
foobar();|
類似地:
foobar("blah|")
I型分號:
foobar("blah");|
如果我想在原來的光標位置分號,我按空格鍵智能重新定位後:
foobar("hello|")
foobar("hello");|
foobar("hello;|")
我用這個映射:
inoremap <leader>; <C-o>A;
這不是;
因爲我使用分號經常和不止一種情況下。
<C-o>
用於輸入單個正常模式命令。A;
的意思是「在行末添加一個;
」。@dansomething:哦,是的!自從那個答案以後,我在'〜/ .vimrc'中多次修改了這一行。這裏是目前的化身:inoremap
隨着你的映射,vim等待每個
@Koshimitsu這是標準行爲,你只有在你自己停下來的時候纔會注意到它。 – romainl
" ftplugin/c/c_snippet.vim
inoremap <expr> <buffer> ; getline('.')[col('.')-1:-1]=~')$' ? '<right>;' : ';'
,如果你的代碼片段引擎擴展成
for (...|) {
<+code+>
}<++>
如果打開支架是一個換行符此版本不應構成與for
的問題,它會搞亂了。
你可以很容易地將正則表達式更改爲'"\=)\+$'
來回答你最初的問題。
inoremap <expr> <buffer> ; getline('.')[col('.')-1:-1]=~'"\=)\+$' ? '<end>;' : ';'
但是,我不認爲這是一個好主意。在這種情況下,對於<bs>
映射將是:
inoremap <expr> <buffer> <bs> getline('.')[:col('.')-2] =~ '.*")\+;$' ? '<bs><c-o>F";' : '<bs>'
我想要做同樣的事情,我就可以了整整一夜的工作,大量代碼,但最後,我有一個簡單的解決方案。
inoremap ;<cr> <end>;<cr>
,如果我在一撐,我想補充一個分號或在最後一個點,這樣
foo({
|
})
我按;;<cr>
或..<cr>
做到這一點
inoremap ;<cr> <end>;<cr>
inoremap .<cr> <end>.
inoremap ;;<cr> <down><end>;<cr>
inoremap ..<cr> <down><end>.
我使用以下函數和映射將分號插入行的末尾並刪除重新生成空格:
imap <leader>. <C-R>=Semicolonfun()<CR>
fun! Semicolonfun() "{{{
call setline(line('.'), substitute(getline('.'), '\s*$', ';', ''))
return "\<End>"
endfunction "}}}
所以,如果你有這樣的:
log.warning("you miss the |identifier")
緊迫。要麼 ,。如果您重新映射的領導者,你會得到如下:
log.warning("you miss the identifier");|
你應該嘗試Cosco.vim插件。
而如果你想在你的字符串文字裏面實際上有一個分號呢? –
在Eclipse中,在智能分號插入後按下退格鍵會將分號放在原始光標位置。 – dteoh
理想的解決方案:使用Python。那麼你不需要擔心分號;-) –