Vim:缩进一个空格(不是shiftwidth空格)

rda*_*sxy 44 vim

默认的VIM缩进命令由shiftwidth空格缩进

例如

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces
Run Code Online (Sandbox Code Playgroud)

有没有办法用一个或n(其中n!= shiftwidth)空格缩进?

一种方法是垂直选择块中的列,Ctrl+V然后I垂直插入,然后键入a space<Esc>.但有更好的方法吗?

dsu*_*rsl 37

我不确定有更好的方法.但是,有几种方法可以做到(我无论如何都能想到)......

您的Visual Block解决方案

就像你说的那样:按Ctl-V选择你想要的行,按下I以插入,然后输入空格数.

搜索

与上述类似,但更灵活一点 - 你可以使用'select paragraph' vip命令,或任何范围真的:按vvip或你有什么选择范围,以及:s/^/{n spaces}{n spaces}是数字的类型您要插入的空格.

它有点冗长,但几乎适用于任何范围.哎呀,如果你想做你可以做的整个文件Ctl-A或你有什么(依赖于操作系统)并缩进整个文件(或者只是跳过整个可视模式的东西,只需要执行命令模式......就像在:1,$s/^/{n spaces}

请注意,您不必在s ///中包含第三个斜杠,因为您没有在末尾添加任何标记.

全球

也许你只想缩进符合某种模式的行.说...所有包含foo的行.没问题:打字:g/foo/s/^/{n spaces}

如果Global的多线部分具有相似的模式,则Global特别方便.你可以逃到普通模式的土地并选择你想要的线条并相应地缩进::g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}.Ctl-V{Enter}最后的那些额外的东西更复杂但在某些情况下是有用的.

使用tabstop和shiftwidth

是的,如果你做了很多-我会做:set ts=2:set et:set sw=2和使用>>以及<<每个哪种方式?

做一个功能

好了,还是不够的,无论出于何种原因简单,你需要做的多了,你无法忍受搞乱sw,etts设置.没问题,只需编写一个快速函数并给它一个localleader映射:

function! AddSpace(num) range
  let s:counter = 0
  let s:spaces = ''
  while s:counter < a:num
    let s:spaces .= ' '
    let s:counter = s:counter + 1
  endwhile
    execute a:firstline .','. a:lastline .'s/^/'. s:spaces
endfunction

:map <LocalLeader>i :call AddSpace(3)Ctl-V{enter}
Run Code Online (Sandbox Code Playgroud)

也许只知道不止一种方法这样做比仅知道一种方法更好?毕竟,有时最好的解决方案取决于问题:)

  • 对于那些还想知道 `et`、`ts` 和 `sw` 是什么意思的人:`expandtab`、`tabstop` 和 `shiftwidth` (2认同)

idn*_*vid 28

使用Visual Block模式将vi中的代码块缩进三个空格:

  1. 选择要缩进的代码块.Ctrl+V在正常模式下使用并向下箭头选择文本.选中它时,输入":"以向所选文本块发出命令.

  2. 以下内容将出现在命令行中: :'<,'>

  3. 要将缩进设置为3个空格,请键入le 3并按Enter键.出现的是::'<,'>le 3

  4. 所选文本立即缩进为3个空格.

使用Visual Line模式将vi中的代码块缩进三个空格:

  1. 在VI中打开您的文件.
  2. 将光标放在某些代码上
  3. 处于正常模式时,按以下键:

    Vjjjj:le 3
    
    Run Code Online (Sandbox Code Playgroud)

解释你做了什么:

V 意味着开始选择文字.

jjjj 箭头向下4行,突出显示4行.

: 告诉vi,您将输入突出显示文本的说明.

le 3 意味着缩进突出显示的文本3行.

  • 我不同意,因为带有`:le 3`的解决方案从左边距(第1/0列)缩进,但我认为OP希望(进一步)从它所处的位置缩进一段文本.例如,为了更好地垂直对齐代码/文本,与更好的位置相比,自动缩进几个空格. (8认同)

Aay*_*mar 15

要更改为缩进插入的空格字符数,请使用以下shiftwidth选项:

:set shiftwidth = <number>
Run Code Online (Sandbox Code Playgroud)

看看这里了解更多细节.

您也可以将其添加到您的.vimrc文件中.

  • 1up。一些建议的解决方案在没有设置 shiftwidth 的情况下无法正常工作。 (2认同)

小智 7

如果我理解正确,你可以使用:

ctrl + V,jj然后是':le n',其中n是要缩进的空格数.

http://vim.wikia.com/wiki/Shifting_blocks_visually