Emacs / vim 快速复制粘贴
Emacs / vim quick copy paste
我正在尝试过渡到 emacs(使用邪恶的 mode/vim 键绑定),但我感觉 efficient/productive 比只使用鼠标更难。这是我发现自己真的很慢的情况的示例:
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 个不变。
通常情况下,这对鼠标来说不会太糟糕。例如,我可以用 testData
替换第一个 allData
,复制它,用鼠标移动到接下来的 3 个出现处,然后每次按 CTRL-V。或者更好的是,只需在 sublime/atom 中使用多个光标并一次性替换所有 4 个
我在带有 vim 键绑定的 emacs 中使用 spacemacs。因此,在 emacs 中,我发现自己必须执行以下操作:
SPC-SPC a
(跳转到以 a 开头的单词)
cw testData
对我要替换的每个单词重复这 2 个步骤一次
这看起来真的很低效,我想知道:我只是使用了一种低效的方法吗?有没有更快的方法来做我想做的事?
似乎即使我设法非常快地完成这些步骤(4 次),仍然需要输入更多的内容,而且我看不出这比仅仅伸手去拿更快老鼠。是的,有人可能会说我不断地伸手去拿鼠标是在浪费时间,但在我看来,我是在通过伸手去拿鼠标来节省打字时间,因为我只需按几次 CTRL-V 就可以达到我想要的效果想。在这种情况下,vim 速度增益到底在哪里?
如果你只是想replace, you can use query-replace
,一个字一个字的替换。
您也可以使用replace-string
,但请记住将替换限制在缓冲区的一部分,激活该部分周围的区域。
无论如何,这些命令可能会阻止您通过眼睛找到单词、通过鼠标移动光标以及将手移回键盘。他们也可以避免可能的忽视。至少我不想在打字时把手离开键盘。 :)
我不确定 "vim-like" Spacemacs 怎么样,但是你 可以 在 Vim:
中这样做
/all<CR>
cgntest<Esc>
.
.
.
或:
/all<CR>
cetestData<Esc>
n.
n.
n.
或:
:,$s/allD/testD/gc<CR>
也许这些方法之一也适用于 Spacemacs?
除了通常的(通常是最好的)答案query-replace
(见@songyuanyao的回答),你还可以使用二级selection 的优势是 select 在不同的地方主动粘贴相同的东西。与 region 不同,次要 selection 与光标位置无关(又名 point),因此它始终可用,无论光标所在的位置。
与查询替换不同的是,您可以按需粘贴它,而不必对每个匹配项进行回答。如果您使用 delete-selection mode 那么只需 select 一些文本来替换并粘贴辅助 selection 来替换它。
您可以使用鼠标设置和粘贴辅助 selection - 请参阅 Secondary Selection on the Emacs Wiki, and see the Emacs manual, node Secondary Selection。
如果您使用库 second-sel.el
,那么您也可以使用键盘上的辅助 selection,并充分利用它。
我正在尝试过渡到 emacs(使用邪恶的 mode/vim 键绑定),但我感觉 efficient/productive 比只使用鼠标更难。这是我发现自己真的很慢的情况的示例:
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 个不变。
通常情况下,这对鼠标来说不会太糟糕。例如,我可以用 testData
替换第一个 allData
,复制它,用鼠标移动到接下来的 3 个出现处,然后每次按 CTRL-V。或者更好的是,只需在 sublime/atom 中使用多个光标并一次性替换所有 4 个
我在带有 vim 键绑定的 emacs 中使用 spacemacs。因此,在 emacs 中,我发现自己必须执行以下操作:
SPC-SPC a
(跳转到以 a 开头的单词)cw testData
对我要替换的每个单词重复这 2 个步骤一次
这看起来真的很低效,我想知道:我只是使用了一种低效的方法吗?有没有更快的方法来做我想做的事?
似乎即使我设法非常快地完成这些步骤(4 次),仍然需要输入更多的内容,而且我看不出这比仅仅伸手去拿更快老鼠。是的,有人可能会说我不断地伸手去拿鼠标是在浪费时间,但在我看来,我是在通过伸手去拿鼠标来节省打字时间,因为我只需按几次 CTRL-V 就可以达到我想要的效果想。在这种情况下,vim 速度增益到底在哪里?
如果你只是想replace, you can use query-replace
,一个字一个字的替换。
您也可以使用replace-string
,但请记住将替换限制在缓冲区的一部分,激活该部分周围的区域。
无论如何,这些命令可能会阻止您通过眼睛找到单词、通过鼠标移动光标以及将手移回键盘。他们也可以避免可能的忽视。至少我不想在打字时把手离开键盘。 :)
我不确定 "vim-like" Spacemacs 怎么样,但是你 可以 在 Vim:
中这样做/all<CR>
cgntest<Esc>
.
.
.
或:
/all<CR>
cetestData<Esc>
n.
n.
n.
或:
:,$s/allD/testD/gc<CR>
也许这些方法之一也适用于 Spacemacs?
除了通常的(通常是最好的)答案query-replace
(见@songyuanyao的回答),你还可以使用二级selection 的优势是 select 在不同的地方主动粘贴相同的东西。与 region 不同,次要 selection 与光标位置无关(又名 point),因此它始终可用,无论光标所在的位置。
与查询替换不同的是,您可以按需粘贴它,而不必对每个匹配项进行回答。如果您使用 delete-selection mode 那么只需 select 一些文本来替换并粘贴辅助 selection 来替换它。
您可以使用鼠标设置和粘贴辅助 selection - 请参阅 Secondary Selection on the Emacs Wiki, and see the Emacs manual, node Secondary Selection。
如果您使用库 second-sel.el
,那么您也可以使用键盘上的辅助 selection,并充分利用它。