Vsvim: 如果空行,cc不会将光标缩进

创建于 2012-05-08  ·  10评论  ·  资料来源: VsVim/VsVim

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则将其置于右缩进)。

最有用的评论

这个简单的解决方法使我得到了vim期望的行为:

nmap S ddO
nmap cc S

所有10条评论

我在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#->格式下):

  1. 缩进(缩进块内容,大小写,标签,不缩进打开/关闭括号)
class MyClass
{
    public void Method()
    {
        goto MyLabel;
MyLabel:
        return;
    }
}
  1. 在新行下,我已检查所有内容
  2. 间距:除“设置其他间距选项”外,所有内容均未选中-在控制流语句中的关键字之后插入空格; “设置分隔符的间距”-:以冒号为基础,以逗号后,以分号为后,以冒号为基础; “设置操作员的间距”:之前和之后。

我也不知道这是否重要,但我已将缩进设置为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”,因此在反思时就不足为奇了。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

DanielKeogh picture DanielKeogh  ·  3评论

iamkarlson picture iamkarlson  ·  7评论

myopicmage picture myopicmage  ·  5评论

keithn picture keithn  ·  3评论

elrob picture elrob  ·  6评论