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

标签 vim

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

例如

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces

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

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

最佳答案

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

您的视觉块解决方案

就像你说的:按 Ctl-V选择你想要的线路,按I插入,然后输入空格数。

搜索

与上述类似,但更灵活 - 您可以与“选择段落”一起使用 vip命令,或任何范围:按 vvip或者你有什么选择范围和类型:s/^/{n spaces}其中 {n 个空格} 是您要插入的空格数。

它有点冗长,但几乎适用于任何范围。哎呀,如果你想做整个文件,你可以做 Ctl-A (取决于操作系统)并缩进整个文件(或者只是跳过整个视觉模式的事情,只是在命令模式下执行...如 :1,$s/^/{n spaces}
请注意,您不必在 s///中包含第三个斜杠,因为您没有在搜索末尾放置任何开关。

全局

也许您只想缩进匹配某个模式的行。说...包含 foo 的所有行。没问题:输入 :g/foo/s/^/{n spaces}
如果具有类似模式的多行部分,则全局特别方便。您可以转入普通模式并选择所需的行并相应地缩进::g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter} .稍微复杂一点的额外 Ctl-V{Enter}最后但在某些情况下有用。

使用制表位和 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}

也许只知道一种以上的方法比只知道一种更好?毕竟,有时最好的解决方案取决于问题:)

关于Vim:缩进一个空格(不是 shiftwidth 空格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9287813/

相关文章:

vim - 获取Vim脚本的<SNR>

vim - 即使只打开一个文件也显示 vim 标签行

vim - 我的 vimgrep 搜索没有像我预期的那样运行

vim - 当文件已经垂直打开时,在 vim 中水平打开不同的文件(不关闭文档)

vim - 如何使用 vimscript 在文件中读取和写入列表

VIM - 菜单中没有 UTF-8

visual-studio - C# 开发人员应该学习 Emacs/Vim 有什么理由吗?

c++ - 为我的代码或 vim 编辑器设置对齐规则的工具或脚本

vim - Vim 中有这么多热键 - 那么如何为您的自定义操作选择一个热键呢?

svn:使用vim合并冲突