Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vim中将开始的花括号移动到新行?_Vim - Fatal编程技术网

如何在Vim中将开始的花括号移动到新行?

如何在Vim中将开始的花括号移动到新行?,vim,Vim,我是一名C#开发人员,对使用Vim还不熟悉。我很好奇,您会在.vimrc文件中放入什么,以便在键入大括号并按Enter键时,如下所示: public void Foo() {<Enter> public void Foo() { | } 任何帮助都将不胜感激,谢谢 有很多方法来编程。举个例子,我可以这样做: inoremap {<Cr> <Esc>:call AutoBracketDrop()<Cr>a function! AutoB

我是一名C#开发人员,对使用Vim还不熟悉。我很好奇,您会在
.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>"