在Vim中计算缩进级别时如何在注释后忽略空格

Dav*_*ver 5 vim comments javadoc autoformatting

考虑编写包含缩进列表的JavaDoc样式注释(何时expandtab设置和softtabstop=2):

/**
 * First line:
 *   - Indented text
 */
Run Code Online (Sandbox Code Playgroud)

目前,在打字First line:和点击之后return,Vim会正确插入*<space>.但是,当我按下tab缩进第二行时,只会插入一个空格而不是两个空格.

是否可以解决此问题,因此*在缩进计算期间将忽略后面的空格?

Kei*_*son 1

我仍然是 VimScript 的初学者,但我为你准备了这个。尝试一下,让我知道你的想法。

function AdjustSoftTabStop()
    " Only act if we are in a /* */ comment region
    if match(getline('.'), '\s*\*') == 0
        " Compensate for switching out of insert mode sometimes removing lone
        " final space
        if match(getline('.'), '\*$') != -1
            " Put back in the space that was removed
            substitute/\*$/\* /
            " Adjust position of the cursor accordingly
            normal l
        endif
        " Temporary new value for softtabstop; use the currect column like a
        " base to extend off of the normal distance
        let &softtabstop+=col('.')
    endif
endfunction

function ResetSoftTabStop()
    " Note that you will want to change this if you do not like your tabstop
    " and softtabstop equal.
    let &softtabstop=&tabstop
endfunction

" Create mapping to call the function when <TAB> is pressed. Note that because
" this is mapped with inoremap (mapping in insert mode disallowing remapping of
" character on the RHS), it does not result in infinite recursion.
inoremap <TAB> <ESC>:call AdjustSoftTabStop()<CR>a<TAB><ESC>:call ResetSoftTabStop()<CR>a
Run Code Online (Sandbox Code Playgroud)