我是C#開發人員,我是使用Vim的新手。我很好奇,你怎麼把你的.vimrc
文件,這樣當你鍵入一個大括號,並按下回車鍵,這樣的:如何在Vim中將開口大括號移動到新行?
public void Foo() {<Enter>
那支具被換上了新的生產線,並插入符移動到內臟的大括號,如下:
public void Foo()
{
|
}
任何幫助,將不勝感激,謝謝!
我是C#開發人員,我是使用Vim的新手。我很好奇,你怎麼把你的.vimrc
文件,這樣當你鍵入一個大括號,並按下回車鍵,這樣的:如何在Vim中將開口大括號移動到新行?
public void Foo() {<Enter>
那支具被換上了新的生產線,並插入符移動到內臟的大括號,如下:
public void Foo()
{
|
}
任何幫助,將不勝感激,謝謝!
你提的問題是非常接近auto-close plugin issuse with curly brackets其中
inoremap <expr> <cr> getline(".")[col(".")-2:col(".")-1]=="{}" ? "<cr><esc>O" : "<cr>"
回答了這個問題 - 這是有點什麼我在lh-brackets使用。
在這裏,你似乎沒有使用任何包圍插件。要搜索的文本變爲'\S\s*{$'
,並且您可以插入:<BS><cr>{<cr>}<esc>O
,或者只有{
就行。如果光標在{}
之內,則還應該集成先前的測試。 這成爲:
inoremap <expr> <cr>
\ getline(".") =~ '\S\s*{$' ? "<bs><cr>{<cr>}<esc>O"
\ : getline('.') =~ '^\s*{$' ? "<cr>}<esc>O"
\ : getline(".")[col(".")-2:col(".")-1]=="{}" ? "<cr><esc>O"
\ : "<cr>"
有很多方法來編程。正如一個例子,我可以這樣做:
inoremap {<Cr> <Esc>:call AutoBracketDrop()<Cr>a
function! AutoBracketDrop()
if col('.') == col('$') - 1
substitute /\s*$//
exec "normal! A\<Cr>{\<Cr>X\<Cr>}\<Esc>k$x"
else
exec "normal! a{\<Cr>\<Esc>"
endif
endfunction
首先,我添加插入地圖,可中止插入並調用AutoBracketDrop
功能,完成後進入返回到插入模式。
函數只檢查遊標列是否與行的最後一列匹配。如果是這樣,我們刪除尾隨空白和追加測試:
cursor is here>
{
X
}
因爲採用<Cr>
應該保持縮進如果您鍵入他們。我們必須有一個標記X
,否則Vim將刪除空行中的空格,並繼續追加(a
)將使壓痕鬆動。這樣,文本最終成爲:
cursor was here>
{
X
}
然後我們向上移動光標一行,刪除X
和退出功能。
如果它位於該行的中間,我們只需簡單地重新創建用於觸發映射的鍵入的字符。
這將是一個很好的問題https://vi.stackexchange.com/ – Sukima