Ben*_*oit 1111
是.点击Ctrl- R然后".如果您在抽取的内容中有文字控制字符,请使用Ctrl- R,Ctrl- O, ".
这是对使用寄存器可以做什么的解释.你可以用寄存器做什么是非凡的,一旦你知道如何使用它们,你就不能没有它们.
寄存器基本上是字符串的存储位置.Vim有许多寄存器以不同的方式工作:
0
(yank寄存器:当你y
在普通模式下使用时,没有指定寄存器,被拉动的文本也会到达默认寄存器),1
to 9
(移位删除寄存器,当你使用诸如c
or之类的命令d
,删除的内容进入寄存器1,寄存器1中的内容进入寄存器2 等),"
(默认寄存器,也称为未命名寄存器.这是"进来的地方Ctrl- R,"),a
以z
供自己使用(大写A
来Z
是附加到相应的寄存器)._
(就像/dev/null
(Unix)或NUL
(Windows)一样,你可以写它但它被丢弃了,当你从中读取它时,它总是空的),-
(小删除寄存器),/
(搜索模式寄存器,当你看文字更新了/
,?
,*
或#
例如;你也可以写信给它动态地改变搜索模式),:
(通过Q
或:
只读存储最后一个VimL类型命令),+
和*
(系统剪贴板寄存器,您可以写入它们来设置剪贴板并从中读取剪贴板内容)请参阅:help registers
完整参考.
您可以随时使用它:registers
来显示所有寄存器的内容.此命令的同义词和缩写词是:display
,:reg
和:di
.
在插入或命令行模式下,Ctrl- R加上寄存器名称,插入该寄存器的内容.如果你想按字面插入它们(没有自动缩进,没有控制字符的转换,如0x08
退格等),你可以使用Ctrl- R,Ctrl- O,寄存器名称.请参阅:help i_CTRL-R
以下段落以获取更多参考.
但是您也可以执行以下操作(我可能忘记了寄存器的许多用途).
在正常模式下,点击":p.您在vim中使用的最后一个命令将粘贴到缓冲区中.
让我们分解:"
是一个普通模式命令,它允许您选择在下一次抽取,删除或粘贴操作期间使用的寄存器.因此":选择冒号寄存器(存储最后一个命令).然后p是你已经知道的命令,它会粘贴寄存器的内容.
比照 :help "
,:help quote_:
你正在编辑一个VimL文件(例如你的.vimrc
),并希望现在执行几个连续的行:yj:@"Enter.
在这里,yj将默认寄存器(也称为未命名的寄存器)拉出当前和下一行(这是因为j是线性运动,但这超出了本答案的范围).然后:@
Ex命令播放存储在作为参数给出的寄存器中的Ex命令,并且"
是您如何引用未命名的寄存器.另请参阅此答案的顶部,这是相关的.
不要混淆"
这里使用的(这是一个寄存器名称)与"
上一个例子中的混淆,这是一个普通模式命令.
比照 :help :@
和:help quote_quote
在插入模式下将最后一个搜索模式插入到文件中,或者使用Ctrl- R,在命令行中插入/.
比照 :help quote_/
,help i_CTRL-R
推论:保持搜索模式但添加替代方案:/
Ctrl- R, / \|alternative
.
你在视觉模式中在一行中间选择了两个单词,然后将它们拉出来y
,它们位于未命名的寄存器中.现在要打开略低于你在哪一个新的生产线,用这两个词::pu
.这是简写:put "
.:put
与许多Ex命令一样,该命令仅适用于行.
比照 :help :put
你也可以做到::call setreg('"', @", 'V')
然后p
.的setreg
功能设定,其名称被给定为第一个参数(字符串)的寄存器,与所述第二参数的内容进行初始化(并且可以使用寄存器作为变量的名称@x
,其中x
是在VimL寄存器名),和将其转换为第三个参数中指定的模式,V
对于linewise,^V
对于按字段和字面,没有任何内容.
比照 :help setreg()
.反向功能是getreg()
和getregtype()
.
如果你用qa
... 记录了一个宏q
,那么它:echo @a
会告诉你你输入了什么,@a
并将重放宏(可能你知道那个,非常有用,以避免重复的任务)
比照 :help q
,help @
上一个例子的推论:如果你8go
在剪贴板中,那么@+
将把剪贴板内容作为宏播放,从而转到你文件的第8个字节.实际上这几乎适用于每个寄存器.如果您最后插入的字符串dd
处于插入模式,那么@.
将(因为.
寄存器包含最后插入的字符串)删除一行.(Vim文档是错在这方面,因为它指出寄存器#
,%
,:
并且.
将只与工作p
,P
,:put
和Ctrl- R).
比照 :help @
不要混淆:@
(从寄存器播放Vim命令的命令)和@
(从寄存器播放正常模式命令的普通模式命令).
值得注意的例外是@:
.命令寄存器不包含初始冒号,也不包含最终的回车符.但是在正常模式下,@:
将执行您所期望的操作,将寄存器解释为Ex命令,而不是尝试在正常模式下播放.因此,如果您的最后一个命令是:e
,寄存器包含e
但@:
将重新加载文件,而不是结束单词.
比照 :help @:
在运行之前显示您将在正常模式下执行的操作:@='dd'
Enter.一旦你按下=
键,Vim就会切换到表达式评估:当你输入一个表达式并点击时Enter,Vim会计算它,结果就像一个寄存器内容.当然寄存器=
是只读的,一次性的.每次开始使用它时,都必须输入新的表达式.
比照 :help quote_=
推论:如果您正在编辑命令,并且您意识到您需要在命令行中插入当前缓冲区中的某些行:不要按Esc!使用Ctrl- R =getline(58)
Enter.之后,您将返回命令行编辑,但它已插入第58行的内容.
手动定义搜索模式: :let @/ = 'foo'
比照 :help :let
请注意,这样做,您无需/
在模式中转义.但是,当然,您需要将所有单引号加倍.
副本开始的所有行foo
,事后包含所有线bar
到剪贴板,链条这些命令:qaq
(复位一个寄存器中存储在其内部的空宏), ,:g/^foo/y A
,.:g/bar/y A
:let @+ = @a
使用大写寄存器名称使寄存器在附加模式下工作
更好,如果Q
没有被重新映射mswin.vim
,启动Ex模式Q
,链接那些实际上更好地称为"Ex命令"的"冒号命令",并通过键入返回到正常模式visual
.
比照 :help :g
,:help :y
,:help Q
将文件双倍空间::g/^/put _
.这使得黑洞寄存器的内容(在读取时为空,但可写,表现得像/dev/null
)在每一行之后的行(因为每行都有一个开头!).
foo
在每行之前添加一行::g/^/-put ='foo'
.这是表达式寄存器的巧妙使用.这里-
是.-1
(cf. :help :range
)的同义词.由于:put
将文本放在行之后,您必须明确地告诉它对前一行动作.
将整个缓冲区复制到系统剪贴板::%y+
.
比照 :help :range
(对于%
部分)和:help :y
.
如果您错误地记录了一个宏,则可以键入:let @a='
Ctrl- R =replace(@a,"'","''",'g')
Enter '
并进行编辑.这将修改存储在寄存器中的宏的内容,a
这里显示了如何使用表达式寄存器来执行此操作.
如果你这样做dddd
,你可能会做uu
以撤消.有了p
你可以得到最后删除的行.但实际上你也可以@1
通过寄存器恢复最多9次删除@9
.
更好的是,如果你这样做"1P
,那么.
在正常模式下会播放"2P
,依此类推.
比照 :help .
和:help quote_number
如果要在插入模式下插入当前日期:Ctrl- R=strftime('%y%m%d')
Enter.
比照 :help strftime()
再次,可能令人困惑的是:
:@
是一个命令行命令,它将寄存器的内容解释为vimscript并将其作为源代码@
在正常模式命令中,将寄存器的内容解释为正常模式击键(除非使用:
寄存器,包含上次播放的命令而没有初始冒号:在这种情况下,它会重放命令,就好像您还重新键入冒号和最后的回报键).
"
在普通模式命令中,它可以帮助您选择一个用于猛拉,粘贴,删除,更正等的寄存器.
"
也是一个有效的寄存器名称(默认或未命名的寄存器),因此可以作为期望寄存器名称的命令的参数传递ske*_*ept 46
对于粘贴系统剪贴板的东西,你可以使用SHIFT- INS.
它适用于Windows,但我猜它在Linux中运行良好.
小智 38
"我想把猛拉的文字粘贴到Vim命令行中."
虽然最高投票答案非常完整,但我更喜欢编辑命令历史记录.
在正常模式下,键入:q:
.这将为您提供最近的命令列表,可以使用普通的vim命令进行编辑和搜索.您将从底部的空白命令行开始.
对于文章要求的确切事情,将一条拉线(或任何东西)拉到一个命令行中,拉动你的文本,然后:( q:p
进入命令历史编辑模式,然后(p)将你的被拉动的文本放入一个新的命令line.随意编辑,enter执行.
要退出命令历史记录模式,情况正好相反.在命令历史记录的正常模式下,键入::q
+enter
小智 14
要将系统剪贴板中的内容粘贴到vim命令行("命令模式"),请使用Ctrl+ R后跟+.对我来说,至少在Ubuntu上,Shift+ Ins不起作用.
PS:不确定为什么Ctrl+ R后跟*,理论上与Ctrl+ 相同R后跟+似乎总是不起作用.我搜索并发现了+它的版本,它似乎总是起作用,至少在我的盒子上.
归档时间: |
|
查看次数: |
120521 次 |
最近记录: |