Vim:自动缩进无法工作

20

我的自动缩进不起作用,有没有诊断测试来解决这个问题?

我的“:set”如下:

:set --- 选项 --- cindent laststatus=2 scroll=17
tabstop=4 window=36
filetype=cpp number
smartindent ttyfast
helplang=en paste
syntax=cpp ttymouse=xterm2
backspace=indent,eol,start
fileencoding=utf-8
fileencodings=ucs-bom,utf-8,default,latin1 printoptions=paper:letter
runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim72,/usr/share/vim/vimfiles/af ter,/var/lib/vim/addons/after,~/.vim/after suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc


1
我注意到我必须手动输入“:set autoindent”才能使其起作用。我想知道为什么它没有自动包含,因为它在我的.vimrc文件中。 - l7ecl
这个问题没有被接受的答案吗? - Paul Rooney
注意:在粘贴模式下,自动缩进无法工作,请尝试使用“set nopaste”。 - xealits
9个回答

14

尝试:

:set ai
或:
:set autoindent

了解更多关于自动缩进的内容:

:h ai

否则,可能是文件类型检测上的问题。


1
这对于 .tex 文件对我有效。也许与 @benoit 的答案结合使用(起初并不起作用)。 - polym

12

在更改文件类型后,indentexpr 中存在一个过时的函数,这个方法最终解决了我的问题:

:set indentexpr=

11

如果有其他人面临相同的问题,我曾经遇到了类似的问题,但以上方法都没能解决。对我来说问题出在标签解析上。以下是让它正常工作的设置:

set expandtab
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent

为了检查缩进是否正确,我在我的vimrc文件中添加了以下内容:

" helper for indent mistake
set list listchars=tab:»·,trail:·

如果我的缩进有误,它会显示一个“»”而不是常规的“·”。非常方便。


10

我曾经遇到过同样的问题,这些设置解决了它。

filetype on
filetype plugin on
filetype indent on

1
我在我的~/.vimrc文件中添加了一行代码: filetype plugin indent on - A. R. Diederich

7

您可能应该关闭 smartindent,并使用 :filetype indent oncindent(似乎也已设置)代替。


2
“当设置了‘粘贴’选项时,‘自动缩进’选项会被重置。”因此,请尝试从您的设置中删除‘粘贴’选项(vim-options)。

2

以下是一种测试你的配置是否正确并使 Vim 按照你的设置运行的方法。 This font 表示文字需要按照字面意思输入,但是 <CR> 意味着需要按下 "Enter" 或 "Return" 键。

  • 创建一个新的系统用户,并为其创建一个新的主目录。
  • 启动 Vim。所有设置应该与 Vim 的默认设置相同。
  • 打开一个文件,比如 test.txt。
  • 确保自动缩进已启用 (:set ai?<CR>)。
  • 验证自动缩进未生效:
    • 输入一个空格或两个空格,然后按回车键。
    • 当光标移到下一行时,它应该返回到第 1 列,也就是最左边的列。
  • 打开自动缩进 (:set ai<CR>)。
  • 确保自动缩进已启用 (:set ai?<CR>)。
  • 验证自动缩进生效:
    • 输入一个空格或两个空格,然后按回车键。
    • 当光标移到下一行时,它应该仍停留在同一列。
  • 通过 :mkvimrc<CR> 永久保存自动缩进设置。

希望这可以帮到你!以下是一些其他注意事项:


1

:set smartindent? 显示: nosmartindent

然后使用:set smartindent命令激活它,这对我解决了问题。


0

我曾经遇到过同样的问题,尝试了很多命令,但都失败了。
最后,我使用了以下命令,它起作用了:
autocmd VimEnter * set autoindent
虽然这不是一种优雅的方法,但它确实有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接