vi/vim删除不剪切

2018-06-08  本文已影响636人  千若逸

vi中的删除基本上都是剪切操作,比如normal模式下的x命令看似是删除一个字符,实则是在删除的同时把删除的内容也放在剪贴板里了。当然这个剪贴板并不是系统剪贴板,实际上是vi中的匿名寄存器。

关于寄存器的介绍可以见这篇文章:使用 Vim 寄存器 | Harttle Land

Vim提供了10类寄存器,可在Vim中通过:help registers查看帮助。

匿名寄存器 ""
编号寄存器 "0 到 "9
小删除寄存器 "-
26个命名寄存器 "a 到 "z
3个只读寄存器 ":, "., "%
Buffer交替文件寄存器 "#
表达式寄存器 "=
选区和拖放寄存器 "*, "+, "~
黑洞寄存器 "_
搜索模式寄存器 "/

其中,对黑洞寄存器的介绍是:黑洞寄存器",所有删除或拷贝到黑洞寄存器的文本将会消失。 这是为了在删除文本的同时不影响任何寄存器的值,"通常用于Vim脚本中。

借助黑没事寄存器,我们就可以实现用x命令删除一个字符而不是剪切,具体命令是:"_x

寄存器操作都是双引号开头,所以上面命令中的双引号就不要忽略了。

每次都要进行这样的寄存器操作当然是很麻烦的,有的是办法让它更快捷——在.vimrc中进行如下设置:

nnoremap x "_x
nnoremap X "_X
nnoremap d "_d
nnoremap dd "_dd
nnoremap D "_D
vnoremap d "_d
vnoremap dd "_dd

nnoremap <leader>x ""x
nnoremap <leader>X ""X
nnoremap <leader>d ""d
nnoremap <leader>dd ""dd
nnoremap <leader>D ""D
vnoremap <leader>d ""d
vnoremap <leader>dd ""dd

那么,做了以上的修改怎么做剪切呢?用Visual模式下的x/X就可以实现啦。注意visual模式下的X是删除整行

通常在vi中复制粘贴的内容与系统剪切板是隔离的。系统剪贴板默认是对应"+寄存器的。如果要使系统剪贴板与vi剪贴板相通,办法在.vimrc中做以下的设置:

set clipboard=unnamed

即将系统剪贴板与匿名寄存器对应起来。

关于寄存器另一个简单的介绍:

寄存器        描述            可复写
0        上一次复制的文本    是    
-        上一次删除的文本    否
.        上一次插入的文本    否
%        当前文件的名字        否
#        交替文件的名字        否
/        上一次查找的字符串    否
:        上一次\":\"命令        否
_        黑洞(black hole)    是
=        表达式            否
*        由鼠标选中的文本    是

参考:

copy paste - How to delete (not cut) in Vim? - Stack Overflow

上一篇 下一篇

猜你喜欢

热点阅读