如何让vim不缩进前导空格?

问题描述 投票:0回答:1

我希望 vim 仅使用制表符缩进,但使用

=
总是在一系列制表符后给我一个前导 2 个空格。

我尝试了很多方法,包括这里的所有内容如何在vim中仅使用制表符(而不是空格)。我有

autoindent noexpandtab tabstop=8 shiftwidth=8 copyindent preserveindent softtabstop=0
,但是在 vim 中应用
=
仍然给我 2 的前导空格。我尝试查看加载的文件类型插件,但无法调试问题。

为什么会发生这种情况,我该如何解决?

(编辑:我注意到即使使用

vim -u NONE
也会发生这种情况)

(编辑:补充信息)

我的

indentexpr
equalprg
都设置为空。主要是,我正在编辑 Javascript 文件,通过
debug
breakadd file *.vim
,我可以看到 vim 加载
.../share/vim/vim90/syntax/javascript.vim
并包含以下内容:

" Vim syntax file
" Language: JavaScript
" Maintainer:   Claudio Fleiner <[email protected]>
" Updaters: Scott Shattuck (ss) <[email protected]>
" URL:      http://www.fleiner.com/vim/syntax/javascript.vim
" Changes:  (ss) added keywords, reserved words, and other identifiers
"       (ss) repaired several quoting and grouping glitches
"       (ss) fixed regex parsing issue with multiple qualifiers [gi]
"       (ss) additional factoring of keywords, globals, and members
" Last Change:  2022 Jun 09
"       2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
"       2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder)

" tuning parameters:
" unlet javaScript_fold

if !exists("main_syntax")
  " quit when a syntax file was already loaded
  if exists("b:current_syntax")
    finish
  endif
  let main_syntax = 'javascript'
elseif exists("b:current_syntax") && b:current_syntax == "javascript"
  finish
endif

let s:cpo_save = &cpo
set cpo&vim


syn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
syn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
syn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
syn region  javaScriptComment          start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
syn match   javaScriptSpecial          "\\\d\d\d\|\\."
syn region  javaScriptStringD          start=+"+  skip=+\\\\\|\\"+  end=+"\|$+  contains=javaScriptSpecial,@htmlPreproc
syn region  javaScriptStringS          start=+'+  skip=+\\\\\|\\'+  end=+'\|$+  contains=javaScriptSpecial,@htmlPreproc
syn region  javaScriptStringT          start=+`+  skip=+\\\\\|\\`+  end=+`+ contains=javaScriptSpecial,javaScriptEmbed,@htmlPreproc

syn region  javaScriptEmbed        start=+${+  end=+}+  contains=@javaScriptEmbededExpr

" number handling by Christopher Leonard [email protected]
syn match   javaScriptSpecialCharacter "'\\.'"
syn match   javaScriptNumber           "\<0[bB][0-1]\+\(_[0-1]\+\)*\>"
syn match   javaScriptNumber           "\<0[oO][0-7]\+\(_[0-7]\+\)*\>"
syn match   javaScriptNumber           "\<0\([0-7]\+\(_[0-7]\+\)*\)\?\>"
syn match   javaScriptNumber           "\<0[xX][0-9a-fA-F]\+\(_[0-9a-fA-F]\+\)*\>"
syn match   javaScriptNumber           "\<\d\+\(_\d\+\)*[eE][+-]\?\d\+\>"
syn match   javaScriptNumber           "\<[1-9]\d*\(_\d\+\)*\(\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\)\?\>"
syn match   javaScriptNumber           "\<\(\d\+\(_\d\+\)*\)\?\.\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\>"
syn match   javaScriptNumber           "\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\>"
syn region  javaScriptRegexpString     start=+[,(=+]\s*/[^/*]+ms=e-1,me=e-1 skip=+\\\\\|\\/+ end=+/[gimuys]\{0,2\}\s*$+ end=+/[gimuys]\{0,2\}\s*[+;.,)\]}]+me=e-1 end=+/[gimuys]\{0,2\}\s\+\/+me=e-1 contains=@htmlPreproc,javaScriptComment oneline

syn keyword javaScriptConditional   if else switch
syn keyword javaScriptRepeat        while for do in
syn keyword javaScriptBranch        break continue
syn keyword javaScriptOperator      new delete instanceof typeof
syn keyword javaScriptType      Array Boolean Date Function Number Object String RegExp
syn keyword javaScriptStatement     return with await
syn keyword javaScriptBoolean       true false
syn keyword javaScriptNull      null undefined
syn keyword javaScriptIdentifier    arguments this var let
syn keyword javaScriptLabel     case default
syn keyword javaScriptException     try catch finally throw
syn keyword javaScriptMessage       alert confirm prompt status
syn keyword javaScriptGlobal        self window top parent
syn keyword javaScriptMember        document event location 
syn keyword javaScriptDeprecated    escape unescape
syn keyword javaScriptReserved      abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile async

syn cluster  javaScriptEmbededExpr  contains=javaScriptBoolean,javaScriptNull,javaScriptIdentifier,javaScriptStringD,javaScriptStringS,javaScriptStringT

if exists("javaScript_fold")
    syn match   javaScriptFunction  "\<function\>"
    syn region  javaScriptFunctionFold  start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend

    syn sync match javaScriptSync   grouphere javaScriptFunctionFold "\<function\>"
    syn sync match javaScriptSync   grouphere NONE "^}"

    setlocal foldmethod=syntax
    setlocal foldtext=getline(v:foldstart)
else
    syn keyword javaScriptFunction  function
    syn match   javaScriptBraces       "[{}\[\]]"
    syn match   javaScriptParens       "[()]"
endif

if main_syntax == "javascript"
  syn sync fromstart
  syn sync maxlines=100

  syn sync ccomment javaScriptComment
endif

" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link javaScriptComment       Comment
hi def link javaScriptLineComment       Comment
hi def link javaScriptCommentTodo       Todo
hi def link javaScriptSpecial       Special
hi def link javaScriptStringS       String
hi def link javaScriptStringD       String
hi def link javaScriptStringT       String
hi def link javaScriptCharacter     Character
hi def link javaScriptSpecialCharacter  javaScriptSpecial
hi def link javaScriptNumber        javaScriptValue
hi def link javaScriptConditional       Conditional
hi def link javaScriptRepeat        Repeat
hi def link javaScriptBranch        Conditional
hi def link javaScriptOperator      Operator
hi def link javaScriptType          Type
hi def link javaScriptStatement     Statement
hi def link javaScriptFunction      Function
hi def link javaScriptBraces        Function
hi def link javaScriptError     Error
hi def link javaScrParenError       javaScriptError
hi def link javaScriptNull          Keyword
hi def link javaScriptBoolean       Boolean
hi def link javaScriptRegexpString      String

hi def link javaScriptIdentifier        Identifier
hi def link javaScriptLabel     Label
hi def link javaScriptException     Exception
hi def link javaScriptMessage       Keyword
hi def link javaScriptGlobal        Keyword
hi def link javaScriptMember        Keyword
hi def link javaScriptDeprecated        Exception 
hi def link javaScriptReserved      Keyword
hi def link javaScriptDebug     Debug
hi def link javaScriptConstant      Label
hi def link javaScriptEmbed     Special



let b:current_syntax = "javascript"
if main_syntax == 'javascript'
  unlet main_syntax
endif
let &cpo = s:cpo_save
unlet s:cpo_save

" vim: ts=8

检查

:scriptnames
会产生以下加载的文件

  1: /nix/store/znpi2hc0ijkmd3ckv8pw3m7jcmyms3iz-vimrc
  2: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/syntax/syntax.vim
  3: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/syntax/synload.vim
  4: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/syntax/syncolor.vim
  5: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/colors/lists/default.vim
  6: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/filetype.vim
  7: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/scripts.vim
  8: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/autoload/dist/script.vim
  9: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/colors/quiet.vim
 10: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/getscriptPlugin.vim
 11: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/gzip.vim
 12: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/logiPat.vim
 13: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/manpager.vim
 14: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/matchparen.vim
 15: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/netrwPlugin.vim
 16: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/rrhelper.vim
 17: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/spellfile.vim
 18: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/tarPlugin.vim
 19: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/tohtml.vim
 20: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/vimballPlugin.vim
 21: /nix/store/ps4mgh61nkbq4clrfvpc1rdgsgf5jid9-vim-full-9.0.1441/share/vim/vim90/plugin/zipPlugin.vim
 22: /nix/store/yg583igd7jckx9s0kxw4gwhzxh1lnxq4-vimplugin-vim-sensible-2023-03-29/plugin/sensible.vim
vim indentation
1个回答
0
投票

(转自评论)

我想我已经解决了部分问题。

即使我设置了

nocindent
,并且所有缩进设置(如
indentexpr
)都是空的,我的症状可能就像正在应用
cindent
一样。我的前导空格会在某些情况下出现,包括每当我用未闭合的括号继续一行,或者有带有前导逗号的新行时。

虽然在阅读手册后我仍然不确定 cindent 的哪一部分会给我前导空格https://vimhelp.org/indent.txt.html#cinoptions-values,通过实验,我发现设置任何

indextexpr
都将不再表现出该行为。

现在我求助于

set indentexpr=(cindent(v:lnum)/8)*8
来强制发生的任何
cindent
在选项卡上对齐。

© www.soinside.com 2019 - 2024. All rights reserved.