如何配置Vim以便在返回时不缩进当前行?

时间:2016-05-17 12:00:21

标签: vim

我有以下文字:

        ");

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

            ");

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

如何在点击 return 时将Vim配置为不缩进当前行?我希望Vim根本不接触线路。我目前的设置如下:

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

3 个答案:

答案 0 :(得分:3)

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

:setlocal indentexpr=

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

:setlocal indentkeys=

答案 1 :(得分:3)

文件类型插件可以设置'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和indent脚本设置的自动命令之后触发覆盖的自动命令。

答案 2 :(得分:0)

我创建了一个能满足您需求的功能。

var table = $('#tableId');
$.each(segment, function (index, innerSegment) {
  var rows = '<tr><td rowspan="4" width="25%">' + segment[i].Airline.AirlineName + "</td>";
  rows += '<td width="25%">' + segment[i].ArrivalTime + "</td>";
  rows += '<td rowspan="4" width="25%">&nbsp;</td>';
  rows += '<td rowspan="4" width="25%">' + segment[i].publishedFare + "</td></tr>";
  rows += "<tr><td>" + segment[i].Origin + "</td></tr>"; 
  rows += "<tr><td>" + segment[i].DepartureTime + "</td></tr>";
  rows += "<tr><td>" + segment[i].Destination + "</td></tr>"; 

  table.append(rows);
});

当前光标位于最后,按Enter键,将创建一个新行并移至第一列。 (像往常一样,下面的任何一行都会向下移动) 当光标位于该行的中间,并按Enter键时,它将分割该行。

要使用此功能,您可以映射

    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

这适用于C注释,子程序/函数。