我正在使用Vim并编辑Python脚本.
Autoindent在一般情况下表现相当不错,但是当我开始一个新行并输入'#'来输入评论时,Vim会对我说明这一点.
例如,如果有
def foo():
Run Code Online (Sandbox Code Playgroud)
然后按回车键,Vim会正确缩进
def foo():
pass
Run Code Online (Sandbox Code Playgroud)
但是,如果不是打字pass,我输入#,它会自动显示
def foo():
# comment
class Thing():
def __init__(self):
pass
# comment line gets unindented all the way
Run Code Online (Sandbox Code Playgroud)
我的.vimrc文件如下.有人知道为什么会这样吗?
set tabstop=4
set smartindent
set shiftwidth=4
set expandtab
set backspace=indent,eol,start
set scrolloff=3
set statusline=%f%m%r%h%w\ [%Y\ %{&ff}]\ [%l/%L\ (%p%%)]
set laststatus=2
Run Code Online (Sandbox Code Playgroud) 我在vim中完成所有编码并且对它非常满意(所以,请不要"使用不同的编辑器"响应),但是因为smartindent功能想要不缩进以#开头的注释而持续烦恼.例如,我想要
# Do something
$x = $x + 1;
if ($y) {
# Do something else
$y = $y + $z;
}
Run Code Online (Sandbox Code Playgroud)
而不是vim的首选
# Do something
$x = $x + 1;
if ($y) {
# Do something else
$y = $y + $z;
}
Run Code Online (Sandbox Code Playgroud)
我能够阻止评论被发送到线路开头的唯一方法是在点击#之前插入和删除线路上的字符(每次都要记住要做的麻烦)或完全关闭smartindent (当我打开/关闭括号时,失去自动缩进增加/减少).
如何设置vim来维护我的注释缩进而不是将它们发送到行的开头?
我最近开始使用vim 7(之前的vim 6)和smartindent设置.在大多数情况下,它运作良好,虽然我习惯在打开支撑后键入一个选项卡,这几乎适得其反.
然而,有一种疯狂的行为.编辑shell脚本时,我尝试在当前缩进级别创建注释,但smartindent与此无关.它坚持认为评论必须在0级(没有缩进).更糟糕的是,它打破右移(>>'和朋友),使他们无法正常工作.这是彻底的不服从,我想知道解决它的最佳方法是什么?
(我也不太热衷smartindent的关于缩进的想法then后if.)
首选的解决方案将节省我手动抨击 - 我很懒.一个选项是" smartindent在编辑shell脚本时关闭(其余部分保持打开状态)".另一种选择是如何找到控制脚本smartindent以及编辑什么来改变我不喜欢的特征的指南.最后的选择(我不需要关于如何做的建议 - 只是暗示它是最好的,或唯一的,恢复理智的方式)是不smartindent设置.
我看到了关于" (PHP和)恼人的vim unindent规则 " 的模糊相关问题; 它并没有为我提供直接的答案,尽管其中cindent提到的相关项目实际上可能是答案的一部分.
如下面的屏幕截图所示,我演示了 Vim 在向 Python 代码添加注释时的奇怪行为。在演示 1 和演示 2 之间,我只是在不同的缩进级别(在类定义内)开始注释行。
正如截屏结束时所演示的,只有:在插入模式下键入才能获得正确的缩进。
当开始一行注释时,请保持正确的缩进级别;