【问题标题】:How do I configure Vim to not indent the current line upon hitting return?如何将 Vim 配置为在回车时不缩进当前行?
【发布时间】:2016-05-17 12:00:20
【问题描述】:

我有以下文字:

        ");

当我在插入模式下点击 return 时,Vim 会创建一个新行(如预期的那样),但也会缩进点击 return 的行:

            ");

Vim 只对某些行执行此操作,大概是当它认为缩进不正确时。

如何配置 Vim 在点击 return 时不缩进当前行?我希望 Vim 完全不碰这条线。我目前的设置如下:

set tabstop=4
set shiftwidth=4
set expandtab
set softtabstop=4

【问题讨论】:

  • 一些插件设置/重置smartindent标志;用verbose set si?检查它
  • @sehe 看起来是这样的:"Last set from /.../php.vim",但是该脚本将其 关闭nosmartindent
  • 请注意,它可能与混淆了一些选项的“粘贴”选项有关,“smartindent”就是其中之一。
  • 在 JavaScript 模式下也会发生这种情况。
  • 你能告诉我你正在处理哪种文件类型吗?

标签: vim


【解决方案1】:

文件类型插件可以设置'cinkeys''indentkeys' 所以 当某些键被触发时自动缩进 按下。要关闭此功能,同时保持 'indentexpr' 不变 这样您仍然可以使用 == 缩进,您可以添加 按照自动命令发送到您的vimrc

" Allow filetype detection, plugins and indent files ...
filetype plugin indent on

" ... but keep certain preferred defaults.
augroup overrideftplugins
    au!
    au FileType * set cinkeys= indentkeys=
augroup END

请注意,自动命令需要出现在打开文件类型检测等的行之后。这是因为它们是按照它们被触发的顺序触发的 注册,并且我们希望覆盖的自动命令在为 ftplugins 和缩进脚本设置的自动命令之后触发。

【讨论】:

  • ??????????
  • 在我的vimrc 中已有十多年了。 :-)
【解决方案2】:

我能够使用其中一个标签与其他标签未对齐的 XML 文档重现您的问题。我尝试禁用 autoindent、cindent 和 smartindent,但最终为我解决的问题是清除 indentexpr

:setlocal indentexpr=

或者,您可以从indentkeys 的列表中删除 return,或者将它们完全清除。

:setlocal indentkeys=

【讨论】:

    【解决方案3】:

    我已经创建了一个可以满足你需求的函数。

        function! Enter()
             let pos=getpos('.') 
             let substr = strpart(getline(pos[1], pos[2])
             if strlen(substr)==0
                 exe("normal! o")
                 exe("normal x")
                 startinsert
                 return 1
             else
                 exe("normal! li\<Enter>")
                 startinsert
                 return 0
             endif
         endfunction
    

    当当前光标在末尾时,按回车键,它将创建一个新行并移动到第一列。 (像往常一样,下面的任何行都将被向下移动) 当光标在行的中间,按回车键,会分割行。

    要使用该功能,可以像map

         :imap <Enter> :call Enter()<CR>
    

    这适用于 C cmets、子例程/函数。

    【讨论】:

    • 如果遗漏了任何边缘情况,请告诉我。我会尝试在此处添加它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2012-03-18
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多