Emacs / vim快速复制粘贴

时间:2016-01-30 14:09:15

标签: vim emacs copy-paste spacemacs

我试图转换到emacs(使用邪恶模式/ vim键绑定),并且我很难感觉比使用鼠标时更有效率/更高效。这是一个我发现自己很慢的情况的例子:

for i in range(self.allData.shape[0]):
    self.correctSequence = self.displayNumbers(i, self.allData)
    self.userSequence = self.numberEntry()

    self.allData.set_value(i, 'userSequence', ''.join(self.userSequence))

    if len(self.correctSequence) != len(self.userSequence):
        self.allData.set_value(i, 'correct', 0)
    else:
        if list(reversed(self.correctSequence)) == self.userSequence:
            self.allData.set_value(i, 'correct', 1)
        else:
            self.allData.set_value(i, 'correct', 0)

我必须将self.allData的前4个实例更改为其他内容(例如self.testData),最后2个保持不变。

通常这对鼠标来说太糟糕了。例如,我可以用allData替换第一个testData,复制它,将鼠标用于接下来的3次,然后按每个命中CTRL-V。或者更好的是,只需在sublime / atom中使用多个游标并一次性替换所有4个游标

我在emacs中使用带有vim键绑定的spacemacs。因此,在emacs中,我发现自己必须执行以下操作:

  1. SPC-SPC a(avy跳到以a开头的单词)
  2. cw testData
  3. 对于我要替换的每个单词重复这两个步骤

    这似乎效率很低,我想知道:我只是使用效率低下的方法吗?有没有更快的方法来做我想要的?

    似乎即使我设法快速完成这些步骤(4次),仍然需要做更多的打字,而且我看不出这会比仅仅达到鼠标更快。是的,有人可以通过不断地伸手去拿鼠标来争论我的时间,但在我看来,我通过伸手去拿鼠标来节省打字时间因为我可以按CTRL-V几次实现我想要的。在这种情况下,vim速度到底在哪里?

3 个答案:

答案 0 :(得分:3)

如果您只想replace,则可以使用query-replace,并逐个替换该字词。

您也可以使用replace-string,但请记住将替换限制在缓冲区的一部分,激活该部分周围的区域。

无论如何,这些命令可能会阻止您用眼睛找到单词,用鼠标移动光标并将手移回键盘。他们也可以避免可能的忽视。至少我不想在打字时把手从键盘上移开。 :)

答案 1 :(得分:2)

我不确定“vim-like”Spacemacs是怎样的,但你可以在Vim中这样做:

/all<CR>
cgntest<Esc>
.
.
.

或:

/all<CR>
cetestData<Esc>
n.
n.
n.

或:

:,$s/allD/testD/gc<CR>

也许其中一种方法也适用于Spacemacs?

答案 2 :(得分:0)

除了通常(通常是最好的)答案query-replace(参见@ songyuanyao&#39;答案)之外,您还可以使用辅助选择来有选择地粘贴在不同的地方同样的事情。与 region 不同,辅助选择与光标位置无关(又名 point ),因此无论光标位于何处,它都始终可用。

与查询替换不同,您可以按需粘贴,而不必为每个匹配事件回答。如果您使用delete-selection mode,则只需选择一些要替换的文本并粘贴辅助选项以替换它。

您可以使用鼠标设置和粘贴辅助选择 - 请参阅Emacs Wiki上的Secondary Selection,并参阅Emacs手册,节点Secondary Selection

如果您使用库second-sel.el,那么您也可以使用键盘中的辅助选择,并从中获得更多用途。