删除时vim切换缓冲区覆盖行为
Vim很棒,但是和很多人一样,当我想要复制,删除,然后粘贴时,我真的很生气 – 抓取行动会覆盖yank缓冲区.
现在我知道有101种解决方法和映射,其中一些在这样的帖子中列举:Any way to delete in vim without overwriting your last yank? 但所有这些解决方案都有缺点 – 即使我是一个缓冲大师(我不是).例如,多余的击键 – 而我通常xxxx快速删除4个字符(只有一个按键因为我按住它并等待自动重复),现在切换到x,x,x或无论映射我必须使用不同的缓冲区. 真正理想的只是模式切换,您可以在其中切换D,d,X和x键的副作用行为,以便它们交替地或不也将它们的文本写入缓冲区.这样我就可以简单地进入“无副作用”模式并删除心脏内容,然后在我准备好时粘贴.如果需要,重新启用副作用. 有谁知道这样做的方法? [更新:解决方案]好吧我明白了:我写了一个能够切换“无副作用”模式的功能……完美运行!请参阅下面我接受的正确答案 [更新#2]我的解决方案仍然很好用,我一直在使用它时,我正在做大量的删除和粘贴.但同时我还发现了一种更简单的方法来满足复制,粘贴,删除的特定用例 – 对于要删除的文本是连续的简单情况. 在正常处理文本后,我会使用v命令在视觉上突出显示要删除的文本,然后使用p命令将其粘贴到其上.在没有任何特殊映射的情况下实现了期望的效果. 这个工作流程的唯一问题是,如果我想再次粘贴,粘贴突出显示文本的行为会覆盖原始粘贴缓冲区,但是使用.vimrc中的以下映射可以轻松更改此行为: vnoremap p "_dp vnoremap P "_dP
我认为尝试“关闭”每个删除/更改命令的副作用将是非常困难,如果不是不可能的话.处理这种情况的基本方法:
>在删除或更改命令时使用黑洞(“_)寄存器.例如”_dd 我个人倾向于“0p方法,因为这符合我的思维方式. 现在看到你要求没有这样的解决方法,我已经提供了一些函数来改变粘贴命令,以便在我所谓的paste_copy和nopaste_copy模式之间切换. nopaste_copy是Vim的默认行为.将以下内容放在?/ .vimrc中: function! PasteCopy(cmd,mode) let reg = "" if exists('g:paste_copy') && g:paste_copy == 1 && v:register == '"' let reg = '"0' elseif v:register != '"' let reg = '"' . v:register endif let mode = '' if a:mode == 'v' let mode = 'gv' endif exe "norm! " . mode . reg . a:cmd endfunction command! -bar -nargs=0 TogglePasteCopy let g:paste_copy = exists('g:paste_copy') && g:paste_copy == 1 ? 0 : 1<bar>echo g:paste_copy ? ' paste_copy' : 'nopaste_copy' nnoremap <silent> p :call PasteCopy('p','n')<cr> nnoremap <silent> P :call PasteCopy('P','n')<cr> nnoremap <silent> ]p :call PasteCopy(']p','n')<cr> nnoremap <silent> [p :call PasteCopy('[p','n')<cr> nnoremap <silent> ]P :call PasteCopy(']P','n')<cr> nnoremap <silent> [P :call PasteCopy('[P','n')<cr> vnoremap <silent> p :<c-u>call PasteCopy('p','v')<cr> vnoremap <silent> P :<c-u>call PasteCopy('P','v')<cr> 您可以通过以下方式切换paste_copy模式:TogglePasteCopy.您可能更喜欢这样的映射 nnoremap <leader>tp :TogglePasteCopy<cr> 作为最后的建议,我强烈建议使用“0p或使用命名寄存器而不是这种方法,因为它们是vim原生的,而且还有一种”模式“需要担心. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angular – Cordova无法使用–target读取未定义的属性’nam
- 使用Profile创建第一个Grails+Angular2应用
- 远程调用之RMI、Hessian、Burlap、Httpinvoker、WebService
- ABAP 引用外部WebService时出错: SRT: Unsupported xstream
- scala – 与演员平行的最小的工作单位是什么?
- bash – 按Enter键或等待10秒钟以继续
- 如何在Angular 2中将不存在的链接重定向到主页?
- shell – 默认情况下查看较少的Mercurial日志/状态
- Index of webservice
- AngularJS控制器和“使用严格”