使用Vim我经常想用我刚刚拉出的块替换代码块.
但是当我删除要替换的代码块时,该块本身会进入寄存器,该寄存器会擦除我刚刚移动的块.所以我习惯于yanking,然后插入,然后删除我不想要的东西,但是对于大块代码,这会变得混乱,试图保持插入的块和块分开删除.
那么在Vim中替换文本的最简单,最快捷的方法是什么?
如何将一个寄存器的内容复制到另一个寄存器而不粘贴在剪贴板上?我猛拉了一个文本,它被拖入默认"寄存器.现在我想复制另一个文本而不删除/覆盖"寄存器.所以我想移动"寄存器的内容来说一些a或b注册,以便我可以复制里面的新文本".这该怎么做?
vim中的寄存器是存储文本片段甚至对存储在其中的文本运行命令的一个很好的功能.但是,我是一个整洁的人,并在我完成后倾向于清理事情.
我知道如果我想清除注册a,我可以使用qaq.
我也可以执行以下命令:
:let @a = ''
Run Code Online (Sandbox Code Playgroud)
但是,这些解决方案似乎只是解决问题的方法.当我执行时:registers,列表仍然显示寄存器a(具有空值),而不显示从未使用过的寄存器.
有没有办法清除寄存器,从这个列表中删除寄存器的副作用?
如果是这样,是否还有一种方法可以立即清除所有寄存器,即重置寄存器列表?
可能有2个问题合二为一.我想知道如何在Ex模式下引用寄存器.
例如,我正在编辑一个文件,我想保存文件,并附加一个时间戳(或者只是真正的日期戳).
我知道我可以使用以下命令将寄存器设置为shell命令输出的值:
:let @a = system("date +\"%Y-%m-%d\"")
Run Code Online (Sandbox Code Playgroud)
有没有取消引用该寄存器并将其值插入Ex命令?就像是:
:w testfile.<value of "a register>
Run Code Online (Sandbox Code Playgroud)
复制到系统剪贴板并粘贴会很不错,但是在将来以其他命令为基础以更通用/更方式的方式执行它会很好.
是否可以在vim中组合寄存器?例如,如果我有寄存器"a",b,"c,我可以轻松创建寄存器"d,这是三者的串联吗?也就是说,不将它们全部粘贴然后选择整个事物.
我在用着:
set clipboard=unnamed
Run Code Online (Sandbox Code Playgroud)
这样剪切和复制的选择就会进入寄存器*,它可以方便地链接到x剪贴板(我使用的是 Linux)。
我也想将它放在寄存器中,+以便在其他应用程序中获得鼠标中键粘贴并Ctrl-V给出相同的结果。xclip我想这可能与和之间的差异有关xclip -selection c。
目前我的解决方法是:
noremap Y "+y
Run Code Online (Sandbox Code Playgroud)
这样我就可以Yy复制当前行来+注册,然后在某些应用程序中使用 Ctlr-V。但随后我必须提前考虑是否使用鼠标或 Ctrl-V。
当我拉动或用鼠标选择一些文本时,有没有办法让+和寄存器具有相同的值?*
在vim中,命令:reg[ister]显示寄存器列表,同时:ls显示缓冲区列表,但我不确定寄存器和缓冲区之间的确切区别.我认为寄存器是虚拟内存并与之一起使用"(double quotation mark)+{a-zA-Z0-9.%#:-"}+{motion}.
那么,什么是缓冲区?到目前为止,我混淆了缓冲区和寄存器.
(我唯一知道的是寄存器在CPU中,RAM中的缓冲区.我需要清楚地理解这两个概念才能使用vim.
这是我在文档中发现的寄存器:
There are nine types of registers:
1. The unnamed register ""
2. 10 numbered registers "0 to "9
3. The small delete register "-
4. 26 named registers "a to "z or "A to "Z
5. four read-only registers ":, "., "% and "#
6. the expression register "=
7. The selection and drop registers "*, "+ and "~
8. The black hole register "_
9. Last search …Run Code Online (Sandbox Code Playgroud) 是否存在捕捉中间文本的动作/或\?我知道其他符号有动作---
ci" - 在里面捕捉'文字' "text"
vi(- int var内部视觉捕捉foo(int var)
di[-删除字[word]成[]
我能找到的唯一解决方法是使用Vim Surround,并使用它将周围更改\为"(cs\"),然后从那里开始工作.然而,这不仅是那种乏味,而且插件只支持反斜杠,而不是前进.
我无法复制到+或*注册。
:echo has('clipboard')从 Vim 内部返回0意味着我没有那个功能标志,我不想重新编译。
我正在运行 wayland 所以我不能使用基于 X11 的解决方案
我有很多不同的大学名单.我正在尝试通过将线条与某些唯一关键字进行整理来构建同义词表格; 也就是说,在文件中,我将确定哈佛是这里的关键字:
Harvard Business School|
Harvard College|
Harvard School of Divinity|
Run Code Online (Sandbox Code Playgroud)
并将它们粘贴到另一个文件中
Harvard Business School|Harvard College|Harvard School of Divinity|
Run Code Online (Sandbox Code Playgroud)
我一直在这样做,通过搜索光标下的单词,将该单词的行放入寄存器,将寄存器粘贴到另一个文件中,并使用join命令"J"将这些行连接在一起:
[ clear register 'a' ]
0"ay0
[ move cursor to 'Harvard" and yank lines with keyword into register a ]
:g/\<<CTRL-R><CTRL-W>\>/y A
[ move to other screen and paste ]
"ap
[ join lines ]
JJJJJ
Run Code Online (Sandbox Code Playgroud)
这很好用,但我希望它能够简化.具体来说,我想知道如何从寄存器中删除换行符,这样我就不必在最后一步中使用JJJJ手动加入行.我想搜索光标下包含单词的所有行,将它们复制到'a'寄存器中,从'a'寄存器中删除换行符,然后粘贴'a'寄存器的内容.
有任何想法吗?
编辑:我知道:
我需要知道的是: