是否有可视闪光效果进行编辑?

时间:2016-02-03 08:16:13

标签: vim vi

我们正在寻找的是在正常模式下以视觉方式快速显示受影响的vim编辑区域。例如,编辑时

if (true) {
    //line to be deleted
}

如果我们在dd//line to be deleted,则应在删除之前刷新此受影响区域,我们可以使用Vd执行此操作。我们所看到的效果与Vd使用dd的效果相同。这适用于所有编辑操作,例如cy等。

我们尝试将其映射到nnoremap dd Vd以测试单行,没有运气。如果我们应该这样映射,甚至不确定。

谷歌搜索没有出现任何令人满意的结果。那里有任何已知的插件吗?任何可插入vim的代码也都很棒

1 个答案:

答案 0 :(得分:5)

我给出的例子中有许多内容需要调整,但它们可能是解决问题的良好开端。

您可以使用:redraw:sleep在执行某个功能的过程中绘制选择。

以下是dd的示例:

nmap <silent> dd :call Com_dd()<cr>

function! Com_dd() range
    " Enter visual mode:
    normal! V

    " Select multiple lines, when there's a range:
    let morelines = a:lastline - a:firstline
    if morelines != 0
        exe "normal! ".morelines."j"
    endif

    " Redraw the screen so we can see the selection:
    redraw

    " Sleeps 200ms:
    sleep 200 m

    " Delete the selected lines:
    normal! d
endf

可以使用范围调用它,例如:3dd

对于带有动作的命令,它有点棘手,但你可以接近 对于期望的行为,这是c命令的示例:

nmap <silent> c :set opfunc=Com_c<cr>g@

function! Com_c(type)
    let curpos = getpos('.')

    if a:0  " Invoked from Visual mode, use gv command.
        silent exe "normal! gv"
    elseif a:type == 'line'
        silent exe "normal! '[V']"
    else
        silent exe "normal! `[v`]"
    endif

    redraw

    sleep 200 m

    normal! d
    startinsert
    call setpos('.', curpos)
endf

最后一个示例不处理范围,因此3cw将不起作用(但c3w将起作用。)

有关映射运算符的帮助,请参阅:h g@

会导致一些新问题:例如,.不再使用这些命令。 另一个例子是:标准cw命令不会删除单词之后的任何空格,但我的例子确实如此。

你可能会找到一些关于这些新问题的解决方案,但我现在还没有。