cc删除当前行并将光标置于插入模式(“ autoindent”选项确定其位置)。
VsVim并不总是将光标放在正确的位置。 我一直设法重现它的一种情况是,如果cc空行,它将把光标放在第一列而不是缩进处。
考虑下面的C#起始代码([]是ncursor,| icursor):
class Foo {
public void Bar()
[{]
}
}
按o
打开下面的行:
class Foo {
public void Bar()
{
|
}
}
现在按Esc
:
class Foo {
public void Bar()
{
[ ]
}
}
现在按cc
。 这是Vim和VsVim不同的地方:Vim会将光标缩进条形图内:
class Foo {
public void Bar()
{
|
}
}
而VsVim会将其放置在第0行:
class Foo {
public void Bar()
{
|
}
}
或者,使用以下代码:
class Foo {
public void Bar()
{
throw new NotImplementedException()[;]
}
}
在Vim和VsVim中,单个cc
会将光标置于缩进位置,但是cc<Esc>cc
会将光标置于VsVim的第0列(而Vim则将其置于右缩进)。
我在VsVim中看到的行为反映了我在gVim中看到的行为。
我认为我们可以切换其他设置。 我实际上在顶部的“ o”步骤之后看到了行为差异。 我的光标将与{
出现在同一列上,而不像您以前那样缩进显示。
您可以运行:set
并粘贴输出吗?
autoindent
似乎是我在vimrc中设置的选项之一,然后我在vsvimrc中设置了source
。
hlsearch
ignorecase
incsearch
scrolloff=5
smartcase
vimrc="C:\Users\pmateescu\_vsvimrc"
vimrcpaths="C:\Users\pmateescu;C:\Users\pmateescu"
autoindent
number
tabstop=4
VsVim是否考虑了VS中的缩进设置? 如果是这样,这是我的(在选项->文本编辑器-> C#->格式下):
class MyClass
{
public void Method()
{
goto MyLabel;
MyLabel:
return;
}
}
我也不知道这是否重要,但我已将缩进设置为Smart,大小4,保留制表符。
高温超导
是的,自动缩进似乎确实有所不同。 设置+后,将其另存为.c文件,就可以得到您所看到的行为。
快速浏览一下代码,空行确实是一个问题。 当删除的行很明显应该为空时,该代码不尊重autoindent
。
通常,VsVim更喜欢Visual Studio缩进而不是Vim缩进。 可以通过禁用选项vsvim_useeditorindent
来覆盖它。
这通常可以解决。 不幸的是,在2010年,尽管并非所有语言都提供了用于缩进服务的良好API。 C#是最好的,VB实际上没有最好的,而C ++是一掷千金。 我相信它在VS11中会变得更好,但是还没有玩到足够的数量。
将尝试将此修复程序压缩到1.3中
多玩了一点,实际上是从cindent
而不是autoindent
取消了此行为。 这是我花了这么长时间来解决问题的原因之一。 我正在尝试启用autoindent
文本文件。 仅在cindent
C文件中复制。
您是对的,在您用vim -U NONE -u NONE -cmd 'set cindent' index.cs
提及它之后,我也设法复制了它
在正常设置下,Vim似乎在类似C的文件中会自动将cindent
设置:setl
)。
然而,同样的行为-上删除缩进<Esc>
上,再缩进cc
-似乎不发生cindent
文件:在这两个CSS出现了,我和HTML,但在那些情况下,可能是特定indentexpr
。
@philipmat
@jaredpar
大家好,我遇到了同样的问题。
在最新版本中已修复吗?
:set
之后的输出
backspace="indent,eol,start"
hlsearch
ignorecase
incsearch
autoindent
@lookforit目前没有。 此行为实际上是cindent
,目前VsVim不支持。
这个简单的解决方法使我得到了vim期望的行为:
nmap S ddO
nmap cc S
这仍然是一个不错的选择。 我的直觉是清除行并开始编辑的'cc'应该在创建换行符的缩进级别开始。 有内部的Vim / VS理由不应该这样吗? 我可能会解决它,因为它妨碍了该项目的工作。
解决这个问题的方法表面上不过是“为cc
o
已经做过的事”(这就是@shkm的变通方法起作用的原因),但是必须进行手术使它变得相当多做点事。
VsVim已经在为所谓的“ vim缩进”做正确的事情,这是VsVim在没有语言服务可用时使用的缩进类型。 为了添加针对此问题的测试,我必须在测试中添加基础结构以模拟语言服务。 因此断开连接是,所有现有测试都使用“ vim缩进”,但是99%的用户正在使用“主机缩进”,即在Visual Studio提供缩进服务的地方编辑文件。
使问题进一步复杂化的是,没有一个人曾报告过“ vim indent”错误,该错误在未扩展选项卡时无法正常工作(请参见问题#2302)。 再次,从实际的角度来看,没有人使用“ vim indent”,因此在反思时就不足为奇了。
最有用的评论
这个简单的解决方法使我得到了vim期望的行为: