Questions tagged «register»

寄存器存储文本片段以进行猛拉(复制),删除(剪切),放置(粘贴)。在Vim中,寄存器也用于宏播放,某些寄存器是特殊的,可以引用OS剪贴板或评估表达式。

2
如何查看和编辑录音(即录制的宏)?
我使用复杂的重复记录我的操作(qq记录,一些操作,q停止),但我犯了一个错误。 可以查看我所记录的内容并更正错误,而不必再次执行此操作? 通过@q工作调用记录的字符,但是在映射(:map q- No mapping found)中看不到它。 通过键入以下命令,帮助中没有太多信息:help recording。

5
在不清除寄存器的情况下执行某些操作
通常,在配置文件中,我可能会复制并粘贴一行行,然后我希望对该行进行一些小的更改。粘贴后,我x用来删除要删除的字符,然后继续粘贴下一个块。除了x将已删除的字符放在剪贴板上之外,因此我不得不再次重新复制行块。 有没有一种方法而无需进入插入模式?


3
如何完全清除一个或多个寄存器?
我经常使用的:registers命令显示所有寄存器的内容(我忘了我放在哪里,到底是什么作用"*,".,"%等都是)。 特别是因为我在"选项中设置了选项viminfo,因此我的寄存器在我的vim会话之间(一般来说,我希望短期内保持),随着时间的流逝,:registers列表变得越来越长,因此越来越繁琐和充满真的很旧。 到目前为止,我发现解决此问题的唯一方法是手动从中编辑一些“旧”寄存器内容~/.viminfo,这是我需要做的,vim -u NONE因此有点麻烦。 有没有一种更干净的方法来擦除所有寄存器或擦除特定的寄存器,使其不再出现在:registers列表中?

3
黑洞寄存器(“ _”)的用途是什么?
我最近阅读了有关黑洞寄存器的信息"_,该寄存器是只写寄存器。 Vim文档以这种方式描述它: 黑洞寄存器“ _ 写入该寄存器时,没有任何反应。这可用于删除文本,而不会影响普通寄存器。从该寄存器读取时,不返回任何内容。 在我读过的所有文章和书中,作者始终使用相同的示例,即当我们需要删除一些文本而不删除以前要删除的内容时使用该寄存器。 我了解这种用法​​,但令我惊讶的是,我找不到该寄存器的其他用例,这使我想到两个问题: 该寄存器在其他一些用例中有用吗?如果是,哪个? 如果要在我之前引用的用例中使用该寄存器的唯一目的,为什么Vim的创建者决定使用这种寄存器来解决此问题?我的意思是,此答案显示了针对此问题的解决方案,该问题意味着与使用相比,击键次数更少"_。使用"0还可以避免使用黑洞寄存器,为什么他们要创建它呢?

3
我可以使Vim还将“小删除”保存到寄存器“ 1”中吗?
我最近从设置中删除了YankRing插件,部分原因是它导致了宏的某些问题,但主要是因为我决定最好训练自己使用Vim的寄存器,特别是删除文本最初存储在寄存器中的方式。"1然后通过"2,"3等向上移动,因为进行进一步的删除非常有用。 但是,当删除/更改删除少于一行的文本时,它将存储在"-较小的删除寄存器中(某些移动命令有一些例外)。如果随后进行了一些小删除,则会丢失该部分文本。 是否有可能让Vim将所有删除内容存储在寄存器中"1? nnoremap d "1d 几乎可以使用,但最终在寄存器"1 和 中都显示了文本"2。 我不介意小删除寄存器的功能是否受到影响。建议我更改行为以将小的删除内容保存到命名寄存器中绝对不是一个有用的答案,这就是我目前正在做的事情。
14 register 

1
为什么换行符在搜索寄存器中转换为Null字符,并在命令行转换为回车符?
如果我有以下文字: foo bar 我从视觉上选择它并复制它。 现在,该文本存储在未命名的寄存器中",这是其内容(的输出:reg "): "" foo^Jbar^J 根据此图表,似乎^J是换行符的插入符号。 如果要a通过键入:let @a = @" 以下内容在寄存器中复制未命名的寄存器:这是其内容(的输出:reg a): "a foo^Jbar^J 它没有改变。 如果现在我输入:let @/ = @",将其复制到搜索寄存器中,则其内容为的输出:reg /: "/ foo^@bar^@ 根据上一张图表,它似乎^@是Null字符的插入符号。 为什么换行符会自动在搜索寄存器(而不是a寄存器)内转换为Null字符? 如果我在命令行上(或之后的搜索中/)插入未命名的寄存器,则通过输入:<C-R>",将插入以下内容: :foo^Mbar^M 同样,根据最后一张图表,这^M似乎是回车符的插入符号。 为什么在命令行上将换行符自动转换为回车符? 编辑: 通常,您可以通过键入以下内容来插入文字控制字符: <C-V><C-{character in caret notation}> 例如,您可以<C-R>通过键入插入文字<C-V><C-R>。 您可以为看似任何控制字符执行此操作。 但是,我注意到我无法在缓冲区内或命令行上插入文字LF,因为如果键入:<C-V><C-J>它会插入^@,空字符而不是^J。 是否出于相同的原因将LF在搜索寄存器中转换为NUL? 编辑2: 在中:h key-notation,我们可以阅读以下内容: <Nul> zero CTRL-@ 0 (stored as …

1
防止Vim记录某些文件类型的事件
为了增加这个stackoverflow问题,应该输入哪些内容.vimrc来确保“私人编辑”某些文件扩展名(例如.gpg文件)。 在不影响会话效率的情况下,不应保存任何有关已完成工作的信息,包括寄存器,搜索历史记录,命令历史记录,视图,交换等。对于gpg文件,可以使用此vim插件,但是除了编辑插件外,如何可以将这些讨论的思想扩展到任意文件类型吗? 我们可能会使用以下命令, if <ft in privacy_ext_list> set noswapfile set noundofile set viminfo= endif 但是除了适当的条件语句之外,还缺少什么? 此外,Vimscript是否有办法制作一个文件扩展名数组,然后评估当前文件类型是否在该数组中?

5
如何跨终端复制?
我正在使用Linux系统。在两个终端中打开两个vim。现在我想将文本从A复制到B。一种方法是选择A中的文本,使用鼠标复制,然后切换到B,在插入模式下,命令<c-r>+将粘贴文本。 无论如何,不​​使用鼠标就能执行它吗?像"+yy在A中,当切换到B, o<c-r>+?我徒劳地探索了几种组合。我搜索了“跨终端复制”,但一无所获。 用户@statox建议使用可视化模式,即,一个溶液v$"+y在A中,当切换到B, o<c-r>+。 有没有简单的方法可以在不进入v模式的情况下复制A中的文本?公认进入v模式不会涉及太多击键,只是想知道是否有更好的方法。例如。如果光标在一行的中间,则yy复制整行(以注册"),同时0v$y用额外的击键进行相同的操作。 或者,我的问题可以降低到是否有什么办法比减少击键0v$"+y的副本,这样我可以用<alt-tab>o<c-r>+粘贴。


3
如何将文本从一个寄存器移动到任意数量的寄存器?
有没有办法将文本从一个寄存器“管道”到另一个寄存器或一组寄存器?例如,通过移至"q寄存器。"1"5 我经常希望为同一宏创建稍有不同的版本,因此能够将“模板”宏复制到多个寄存器,然后就地修改每个寄存器,这很有用。 举一个实际的例子,这是促使我想到这个问题的问题。 我需要将以下内容从硬件描述语言转换为许多重复的块, RAM64(in=in, load=load0, address=address[0..5], out=out1); 至 RAM64(in=in, load=load1, address=address[0..5], out=out2); RAM64(in=in, load=load2, address=address[0..5], out=out3); RAM64(in=in, load=load3, address=address[0..5], out=out4); RAM64(in=in, load=load4, address=address[0..5], out=out5); 我有一个宏,它使用增量函数执行此操作,该函数yypW^At)^A存储在register中"a。 有时,我需要递增的模式要稍有不同,例如 RAM512(in=in, load=load1, address=address[0..8], out=out2); RAM512(in=in, load=load2, address=address[0..8], out=out4); RAM512(in=in, load=load3, address=address[0..8], out=out6); RAM512(in=in, load=load4, address=address[0..8], out=out8); 其中,在寄存器中的宏"b会yypW^At)^A^A。 我想要一个寄存器来执行此操作,但是对于从1-5开始的每个增量。"a可以(以某种方式)将该寄存器复制到寄存器b到e。然后,我将每个寄存器粘贴到缓冲区中,进行所需的修改(添加更多项,更改跟随t运动的字符等),然后将修改后的表达式重新拉回到寄存器中。理想情况下,该最后一步甚至可以包含在复制寄存器的命令中 这使我不必重复宏中不需要更改的所有字符。以我的示例为例,这可能是微不足道的,但我可以预见,在某些时候做我想做的事情可能会很有帮助。


4
在neovim中,如何在编辑器实例之间共享寄存器?
我知道vim划分了客户端/服务器,允许不同vim客户端之间共享寄存器,但是您如何在neovim中实现相同的目的?它不支持客户端/服务器标志。我看到了这个问题,但我的目标是专门共享寄存器,而不是模仿其余的客户端/服务器。是像neovim remote这样的唯一方法,还是我可以做的更简单的事情?

4
如何用以前选中的文本替换()中的文本?
假设我之前拉过文本Fnord,并且我的光标位于B该行的上: M:mock(Baz) 如何用先前选中的文本更改()中的文本? 目前,我经常通过以下操作来犯错: di( 又名“删除()内” SHIFT + P 但是,这又给我留下了确切的文字,因为删除的文字将被移到寄存器中。 我希望有: M:mock(Fnord)

1
为*和+寄存器定义自定义命令
如果我正在使用带有该xterm_clipboard功能的Vim版本,则可以通过寄存器获取系统剪贴板内容+。 如果我使用的构建不具有此功能,我可以使"+注册调用我的自定义程序来检索和设置系统剪贴板(xsel -bo和xsel -bi,或同样使用xclip)吗?与"*呼叫xsel -po和相同xsel -pi。 关键是能够键入类似内容,"+p而不必担心该功能是否可用。打字:r !xsel -b<Enter>是不是我要找的:我希望同样的击键工作,我想贴变种遵循什么可用的“真”寄存器(P,gp,...)。 好处:我可以为其他寄存器名称定义自定义命令吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.