在可视模式下,我非常喜欢能够突出显示一段文本,然后使用它>
来缩进该段文本。默认的缩进空间似乎是 \t。
有没有办法改变此命令或另一个命令来缩进突出显示的文本块 X 个空格,例如,如果我只想缩进 2 个空格而不是整个制表符宽度?
答案1
:'<,'>norm I<space><space>
做你想做的事。
答案2
您可以通过添加来更改此行为.vimrc
set shiftwidth=2
它告诉由>
和<
运算符引起的缩进是 2 个字符宽。
您还可以考虑
set tabstop=4
告诉 Vim a\t
相当于 4 个空格,并且
set expandtab
set noexpandtab
它告诉 Vim 在按下 Tab 键或使用 缩进时是否自动替换\t
等量的空格>
。
答案3
一种方法是使用 Ctrl+V 垂直选择块中的一列,然后I
垂直插入,然后键入一个(或任意数量)空格并
为了更加强大:
如果你看不懂中文,在评论中忽略它们就可以了。
" https://superuser.com/questions/694564/indent-x-number-of-spaces-in-visual-mode-vim/1718910#1718910
set tabstop=4 shiftwidth=0
" au AG BufEnter * if &ft == 'lua' | set tabstop=4 | endif
" filetype滞后于BufEnter吧
au AG BufEnter *.lua setlocal tabstop=4
" 有些复制来的lua代码, 要加这个autocmd才能让tabstop=4
au AG BufEnter *.man setlocal ft=man
" 没生效, 现在BufEnter *.man文件后, &ft是nroff
set shiftround
" move 4 spaces
nno > >>
nno < <<
vno < <gv
vno > >gv
" move 2 spaces
nno <M-.> <cmd>call RightN(2)<cr>
func! RightN(n_space)
set noshiftround
normal mt
exe 'normal I'..repeat(' ', a:n_space)
normal `t
set shiftround
endf
nno <M-,> <cmd>call LeftN(2)<cr>
func! LeftN(n_space)
set backspace=indent,start
" 刨掉eol,
set noshiftround
normal mt
exe 'normal I'..repeat('', a:n_space)
normal `t
set shiftround
set backspace=indent,start,eol
endf
vno <M-.> <cmd>call V_RightN(2)<cr><esc>
func! V_RightN(n_space)
set noshiftround
mark t
normal gv
exe "'<,'>normal I"..repeat(' ', a:n_space)
normal `t
normal gv
normal gv
" see: The type of the old area is used (character, line or blockwise).
set shiftround
endf
vno <M-,> <cmd>call V_LeftN(2)<cr>
func! V_LeftN(n_space)
set noshiftround
mark t
exe "'<,'>normal I"..repeat('', a:n_space)
normal `t
normal gv
normal gv
set shiftround
endf
" move 1 space
nno <M-_> mnI <esc>`nl
vno <M-_> mnI <esc>`nlgv
" 状态栏有时提示:
" 3 lines <ed 1 tim
" 3 lines >ed 1 tim
" >ed is just short for "shifted"
set expandtab