vim - 使{和}忽略仅包含空格的行

标签 vim

当您在Vim中使用{和}在段落中导航时,它会跳过除空白外仅包含空格的行,尽管它们否则是“空白”的。

我该如何说服vim在段落中断时将“仅空白”行视为“ {and}”行跳到它们?

最佳答案

这是可以正确处理计数的修改后的版本:

function! ParagraphMove(delta, visual, count)
    normal m'
    normal |
    if a:visual
        normal gv
    endif

    if a:count == 0
        let limit = 1
    else
        let limit = a:count
    endif

    let i = 0
    while i < limit
        if a:delta > 0
            " first whitespace-only line following a non-whitespace character           
            let pos1 = search("\\S", "W")
            let pos2 = search("^\\s*$", "W")
            if pos1 == 0 || pos2 == 0
                let pos = search("\\%$", "W")
            endif
        elseif a:delta < 0
            " first whitespace-only line preceding a non-whitespace character           
            let pos1 = search("\\S", "bW")
            let pos2 = search("^\\s*$", "bW")
            if pos1 == 0 || pos2 == 0
                let pos = search("\\%^", "bW")
            endif
        endif
        let i += 1
    endwhile
    normal |
endfunction

nnoremap <silent> } :<C-U>call ParagraphMove( 1, 0, v:count)<CR>
onoremap <silent> } :<C-U>call ParagraphMove( 1, 0, v:count)<CR>
" vnoremap <silent> } :<C-U>call ParagraphMove( 1, 1)<CR>
nnoremap <silent> { :<C-U>call ParagraphMove(-1, 0, v:count)<CR>
onoremap <silent> { :<C-U>call ParagraphMove(-1, 0, v:count)<CR>
" vnoremap <silent> { :<C-U>call ParagraphMove(-1, 1)<CR>

关于vim - 使{和}忽略仅包含空格的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1853025/

相关文章:

c - 如何根据类型重命名变量

vim - 在 Vim 中搜索并替换每行中第一次出现空格之后的所有字符?

vim - 如何在 Mac OS X 10.9 Mavericks 中将 Vim 从 "-xterm_clipboard"更改为 "+xterm_clipboard"?

vim - 防止vim切换到特定窗口

c++ - 我可以让 vim 对没有扩展名的 C++ 头文件进行语法突出显示吗?

vim - 如何在不离开可视模式的情况下调用移动光标的函数?

vim - 有没有一个插件可以在 vim 中显示 rst 的轮廓

ubuntu - 我的 .vim 文件夹是空的

vim - 如何在 Vim 中重做(即 "undo undo")?

vim - 制作时如何继续编辑文件?