在可视模式 vim 中缩进 X 个空格

在可视模式 vim 中缩进 X 个空格

在可视模式下,我非常喜欢能够突出显示一段文本,然后使用它>来缩进该段文本。默认的缩进空间似乎是 \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

相关内容