开发工具 在 vim 中快速复制粘贴多行

feitian124 · 2012年07月12日 · 最后由 SummerHuiZhang 回复于 2019年03月04日 · 102874 次阅读

用 vim 写代码时,经常遇到这样的场景,复制多行,然后粘贴。 我现在这样做:

  1. 将光标移动到要复制的文本开始的地方,按v进入可视模式。
  2. 将光标移动到要复制的文本的结束的地方,按 y 复制。此时 vim 会自动将光标定位到选中文本的开始的地方,并退出可视模式。
  3. 我移动光标到文本结束的地方,按p粘贴。

我现在想知道,有没有什么命令,可以改变第 3 步,也就是说,我在可视模式复制时,vim 退出可视模式时,是将光标定位到选中文本的末尾,而不是开始。

谢谢。

如果知道行数,比如复制 10 行,命令是: y10j (复制光标下面 10 行) 10jP(粘贴在 10 行后面)

@alvin2ye P是在光标之前粘贴,非我所需 @sevk 大写Vvisual line模式,非我所需

.vimrc 加上 vmap y y`]

#4 楼 @feitian124 你再把你的问题整理一下

有答案了: `> 是最近区域的末尾 `< 是最近选择区域开始

`] `[

@wiboshu 谢谢,这个是我想要的答案,但是稍微有点不好,就是覆盖了默认的y的行为了,而我想保留这个,其实我期待有个gy之类,但是没有发现,所以问问默认配置里有没有这么个命令。 @alvin2yevisual模式下,用y复制选中的文本,vim会退出visual模式,并将光标定位到被选中文本的开始处,我现在想知道有没有个命令,和y执行一样的功能,但是退出visual模式时,光标会定位到被选中文本的结尾处。

@sevk 谢谢,5 楼和你的发现类似。 只是我倾向于保留默认配置,实在没有,才想去自己配置,remap,所以发帖问问。

#9 楼 @feitian124 如果这样的话可以按照你想要的去定制,改成 vmap gy y`] 就能用 gy 作为命令去复制了,默认的配置好像是没有。

感觉 emacs 对于整行复制特别复杂,需要按好多个键。 还要加入好几行配置。

用命令记录 q 配合位置记录 m 可以实现楼主需求

@sevk 在 emacs 中启用 evil-mode,然后和 vi 一样的快捷键,另外还有 expand-region,按 C-@不放即可

#3 楼 @sevk y10j复制的是 11 行:当前行加下面 10 行。

  1. 把光标放在要复制的行
  2. esc
  3. 输入"y 行数 “, 例如 “y10” (复制当前及紧跟的 10 行)
  4. 把光标挪到要粘贴的那一行
  5. 按 p

如果其他不变把 “y10” 变成 “10y” 就是复制第 10 行

需要 登录 后方可回复, 如果你还没有账号请 注册新账号