对我来说,在读了 3 年和几本 Vim 书籍之后,必须明确地存储和检索命名寄存器中的值的认知过程仍然Vim
感觉像是一种负担。我知道它有潜力,但存储和检索的过程打断了我的思路,伤害了我的大脑。
举个例子粘贴:
在 中Emacs
,用户只需点击粘贴按钮即可循环浏览 kill ring。虽然可以说是“愚蠢的”,但我仍然喜欢它。它很流畅,不需要规划,也不需要太多思考。
在 中Vim
,用户必须直接将所述值存储到命名寄存器中,并且有很多选择。您会选择哪一个?要么您简单地使用 1-3 个“最喜欢的”寄存器并将所有内容放入其中,这在某种程度上仍然是“愚蠢的”。如果不是,您必须根据要存储的值选择一个命名寄存器,或者选择其他能够记住/关联该值以供以后检索的方式。
这这是我根本无法习惯的过程。每当我必须在粘贴第一个值之前拉取多个值时,我总是停下来,忘记自己在做什么真的正在做 (更不用说与寄存器配合使用的可怕的键绑定,但这完全是另一回事)。
难道我不够聪明,无法处理Vim
?我知道这个插件,但除非没有其他办法,否则YankStack
我不想模仿。你是怎么做到的?Emacs
答案1
vi 的优点在于,我永远不必将视线从屏幕上移开。我换一种说法,就像斯波克在 TOS(“原初系列”)中的“心灵融合”一样,我与缓冲区编辑的意图相连,手指放在王国的控制键上。事实上,它们(我的手指)只是一个下层协议我很少担心……
以下是我的典型心理过程。
我需要这块数据,通常,我认为一块数据就是一堆行。所以首先,我的大脑 95% 的时间都是从行的范围来思考的。其余 5% 的时间,我会将一两个单词剪切到 yank(推断)缓冲区中,然后将其放在同一行的其他地方 - 通常只是移动一个单词或字母。我甚至尝试过将 yank 复制到命令行,但我用得不够多,所以没记住它。
因此,就我个人而言,处理 95% 的情况(线路范围情况),我想出了...
我想要这些行,从“b”(开始)到“e”(结束)-所以我将用标记“b”标记一系列行的开始,用“e”标记一系列行的结束,然后我要么从 ForTran'ly 设计的寄存器范围开始删除到寄存器中,但通常,我会使用类似“我将东西抓取到寄存器中,‘a’、‘b’、‘c’等。(或‘i’、‘j’、‘k’……或‘u’、‘v’、‘w’……)并最终将这些寄存器粘贴到其他地方。我不会选择从“b”到“e”,而是选择从“a”到“z”。但无论如何,以我自动标记事物的方式(几乎与我的大脑脱节)-我会设置范围-或者使用预定义的范围,如“%”,然后自动进入一系列寄存器。
然后 - 我将转到我想要开始粘贴的位置,然后开始从寄存器缓冲区中拉出内容 - 从“a”开始,然后是“b”,然后是“c” - 直到我没有东西可以粘贴。或者,“取决于我昨晚是否吃了披萨”,我将使用当时对我有用的其他临时“惯例”...
关键是,以尽可能简短的方式访问寄存器 - 在推断的键序列位置中使用单个字母与该寄存器名称,单个字符。
我的答案是 - 我一直在 vi 中使用寄存器。 事实上,当我不添加内容时,我通常会以某种方式、形状或形式与寄存器交互。寄存器很好。对我来说,它们比通过潜在粘贴缓冲区内容窗口进行搜索要好得多。因为使用 vi,如果我输入错误,它就是一个“u”,然后他们会尝试我的另一个常规缓冲区字母 - 直到我输入正确的字母。后一种情况通常是孤立情况 - 我通常会输入正确的缓冲区字母名称。
祝你玩得开心。Vi,尤其是能够与环境过滤器交互的功能(我最喜欢的是 sort、fmt 和 grep)——嘿,现在有一个想法——我通常为我的外部过滤器指定要处理的行范围。我想知道我是否可以通过过滤器将缓冲区处理到另一个缓冲区?然后将过滤后的缓冲区内容粘贴到我需要的地方。下次使用 vi 时要考虑一下——比如在接下来的一分钟左右……我甚至在 XEmacs 中用 Vi(per)启动了我的会话。:-) 对大多数人来说,这很恶心,但我昨天看到了这个有趣的图表,似乎很贴切——啊——UNIX 诗歌:
答案2
我很少有意识地使用命名寄存器来进行提取/放置,但其他寄存器(例如"0
包含最后一次提取的内容、"+
包含系统剪贴板中的内容或"=
表达式寄存器)是我工作流程的重要组成部分。
我倾向于为经常使用的宏保留命名寄存器。
我使用系统范围的剪贴板管理器来访问 Vim 中较旧的剪贴板内容以及其他地方。
答案3
我使用寄存器。我通常使用“a”来存储文本。如果我遇到复杂的情况[1]并且有几件事要记住,我要么使用连续字母,要么使用助记字母——这取决于我估计需要多长时间才能记住它们的含义。
:registers
也派上用场了。
[1] ...我尽量不让事情变得复杂。