Vim:缩进一个空格(不是shift宽度空格)

8cdiaqws  于 2022-11-11  发布在  其他
关注(0)|答案(8)|浏览(203)

缺省VIM缩进命令按Shift宽度空格缩进
例如:

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

有没有办法缩进一个或n个(其中n!=移位宽度)空格?
一种方法是垂直选择块中的一列,然后输入Ctrl+VI垂直插入,然后输入space<Esc>

qojgxg4l

qojgxg4l1#

我不确定有没有更好的方法。但是,有几个方法你可以做到这一点(无论如何我能想到的)...

您的可视数据块解决方案

就像你说的:按Ctl-V选择所需的行,按I插入,然后输入空格数。

搜寻

与上面类似但更灵活一点--您可以与'select paragraph' 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}稍微复杂一点,但在某些情况下很有用。

使用制表位和移位宽度

是的,如果你经常这样做-我会做:set ts=2:set et:set sw=2,并使用>><<的每一种方式...

生成函数

好吧,还是不够简短,不管出于什么原因,你都需要做很多次,你不能忍受swetts的设置。没问题,写一个快速的函数,给予它一个localleaderMap:

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}

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

5anewei6

5anewei62#

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

1.选择要缩进的代码块。在正常模式下使用Ctrl+V,然后按向下箭头选择文本。选中后,输入“:“对所选文本块给予命令。
1.命令行中将显示以下内容::'<,'>
1.要将缩进设置为3个空格,请键入le 3并按Enter键。将显示以下内容::'<,'>le 3
1.所选文本将立即缩进3个空格。

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

1.在VI中打开文件。
1.将光标放在一些代码上
1.在正常模式下按以下键:

Vjjjj:le 3

对您所做工作的解释:

V表示开始选择文本。
jjjj向下箭头4行,突出显示4行。
:告诉vi您将为突出显示的文本输入一条指令。
le 3表示突出显示文本缩进3行

nqwrtyyt

nqwrtyyt3#

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

:set shiftwidth = <number>

请在此处查看更多details
您也可以将其添加到.vimrc文件中。

ogsagwnx

ogsagwnx4#

如果我没理解错的话,你可以用途:
Ctrl+V,jj,然后':le n',其中n是要缩进的空格数。
http://vim.wikia.com/wiki/Shifting_blocks_visually

um6iljoc

um6iljoc5#

在要缩进的代码之间放置标记(“a”和“b”):

<position cursor at top of block>
m a
<position cursor at bottom of block>
m b

执行replace命令,使标记之间的每个换行符都替换为所需的空格数(在本例中为2个空格):

:'a,'bs/^/  /g
v6ylcynt

v6ylcynt6#

我必须在一个vim脚本中缩进一个给定的空格数amount

let sw_setting = &shiftwidth
    set shiftwidth=1
    exe "normal v" . amount . "<"
    let &shiftwidth = sw_setting

一个副作用是它会重置最后一个视觉模式选择。相反,您可能希望编辑exe...行,使其在正常模式下重复执行“〈〈”amount次。即:如果amount为3,则将其改为normal <<<<<<,而不是normal v3<

fwzugrvs

fwzugrvs7#

如果白色缩进已经存在,并且您希望进一步增加一列或多列,则使用Ctrl-V选择一个包含一个或多个空白列的块,拖动并将其粘贴到同一位置。

bpsygsoo

bpsygsoo8#

我喜欢使用空格来缩进一个带有单个空格的可视选择:

vnoremap <silent> <space> :s/^/ /<CR>:noh<CR>gv

我无法使用Shift+Space来缩进,所以我使用z:

vnoremap <silent> z :s/^\s\=//<CR>:noh<CR>gv

相关问题