如何在Vim中将开始的花括号移动到新行?
我是一名C#开发人员,对使用Vim还不熟悉。我很好奇,您会在如何在Vim中将开始的花括号移动到新行?,vim,Vim,我是一名C#开发人员,对使用Vim还不熟悉。我很好奇,您会在.vimrc文件中放入什么,以便在键入大括号并按Enter键时,如下所示: public void Foo() {<Enter> public void Foo() { | } 任何帮助都将不胜感激,谢谢 有很多方法来编程。举个例子,我可以这样做: inoremap {<Cr> <Esc>:call AutoBracketDrop()<Cr>a function! AutoB
.vimrc
文件中放入什么,以便在键入大括号并按Enter键时,如下所示:
public void Foo() {<Enter>
public void Foo()
{
|
}
任何帮助都将不胜感激,谢谢 有很多方法来编程。举个例子,我可以这样做:
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
因为使用
应该保持缩进,就像您键入缩进一样。我们必须有一个标记X
,否则Vim将删除空行中的空白,继续追加(a
)将丢失缩进。这样,文本将结束为:
cursor was here>
{
X
}
然后我们将光标向上移动一行,删除X
,然后退出该函数
在中间行的情况下,我们只需简单地重新创建用来触发映射的字符。
您的问题非常接近于这对我来说是个好问题
cursor was here>
{
X
}
inoremap <expr> <cr> getline(".")[col(".")-2:col(".")-1]=="{}" ? "<cr><esc>O" : "<cr>"
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>"