将视觉选择复制到键盘后,返回到原始位置


18

当我突然决定需要复制该段落时,光标位于段落的中间:

开始

因此,我键入vip以直观地选择该段落:

已选

现在,我点击cmd+C复制到剪贴板(这可能在您的系统上有所不同,但不应与帖子的中心问题相关),这使我的光标停留在该段的开头:

最后

而不是理想的位置,那是我刚开始时的位置。

请注意,当用非视觉方式取消选择时,会出现相同的问题yip

在执行这样的选择/复制操作之后,我希望默认行为是“返回到原始光标位置”。是否有配置使之成为可能?


11
是的,我也觉得很烦。我只是倾向于为此目的使用标记:(mm "+yap `m请注意,"+y将其
拖到

3
我发现将光标放置在被拖动区域的开始或结尾处很有用。毕竟,现在我该如何处理带有被拖拉的文本和其中的光标?现在进行放置/粘贴没有多大意义。但是,如果我想稍后再做,那意味着我也可以稍后再整理……也许您现在需要的只是一个标记。
VanLaser

Answers:


14

一个可能的解决方案是使用跳转:

在拉动或视觉选择之前,您可以设置一个新的跳转,光标移动后便可以访问该跳转。为此,请使用m`

然后,由于拉动光标而使光标移动ctrlo后,在跳转列表中跳回。您也可以使用来查看可用跳转的:jumps列表,ctrlo并使用和浏览该列表ctrli

总结您的工作流程将是:

  • m`
  • yip
  • ctrlo

使用m` 设置标记时,您可以使用``代替跳到该标记ctrlo

您可以阅读:h mark-motions:h :jumps了解更多信息。


我喜欢这个。有没有一种方法可以使单引号在跳动时表现得像反引号一般?单引号更容易键入,通常我想跳到正确的列位置以及右行...
乔纳

1
@Jonah,我映射<leader>'`,对我来说效果很好。(我<space>用作领导者。)
Numeri说恢复Monica

@Jonah:就像Numeri所说的那样,映射可以是一个很好的解决方案,否则,如果您想摆脱背景,可以看看:h 'langmap'。我并不是说这是理想的解决方案,但也许对您来说很有趣。
statox

@Johah,我实际上使用交换了单引号和反勾noremap ' ` noremap ` '...这在我的vimrc中,效果很好
Niko Bellic 2016年

10

您可以避免通过以下方式移动光标:

:'{,'}y

:help range:help mark-motions:help :y


1
很高兴知道,但这是您实际上在做什么?看来打8击,带有两个括号,这比标记解决方案更难
乔纳

如果我在你的位置,那就是我做的。但是我对您描述的行为没有问题,因此我实际上没有这样做。
romainl '16

2
@Jonah您仍然可以选择创建映射。诸如此类的事情:nmap <key> :'{,'}y<CR>应该可以完成。
statox

10

我的光标在段落的中间

如果您刚刚进行了编辑,则最简单的解决方案是键入文字g ;,将光标置于最后的编辑位置。

而且,如果您尚未编辑该段落,则可以使用与您所在的字符相同的字符(例如,您在h,键入rh)执行简单的替换操作,以触​​发编辑“事件”而无需实际编辑任何内容。


2
+1:我一直使用'.,但它可以与过去的变化之间进行导航是非常有用的g;g,
mMontu

2
是否有g;将您带到正确的列位置的版本?
乔纳

@Jonah就是默认行为。它对您有用吗?它总是将我带到正确的列和行位置。
Al.G.

4

VIM-easyclip插件具有这样的设置:

g:EasyClipPreserveCursorPositionAfterYank-默认值0(即禁用)。Vim的默认行为是将光标定位在被选中文本的开头,这与其他动作是一致的。但是,如果您希望在执行拉动操作时光标位置保持不变,请启用此选项。

对于这个小功能,安装一个完整的插件对我来说有点麻烦,所以我更喜欢根据自己的评论使用标记。


0

扩展Al.G.的答案,我们可以直接编辑到所需的位置。解决方法是gi。我们将到达之前处于上一个插入模式的相同位置。

  • 您位于段落的中间。
  • 切换到插入模式。
  • 切换到普通模式。
  • vip
  • gi
  • 切换到普通模式。(gi将使我们进入插入模式)

如果要转到突出显示的文本的开头或结尾。

 :help v_o 

突出显示突出显示的文本时,您还将返回正常模式,并且您可能会或可能不会保留原始光标位置。

  1. 如果您从高光标位置到低光标位置(从低行列号到高行列号)高亮显示,则按时将保留原始光标位置 y
  2. 如果突出显示从较低的光标位置到较高的光标位置,则光标将保持在当前位置。

拉动后返回原始位置:
gv获得上一个突出显示。

现在,您可以使用键
o或在可视模式下在原始位置和当前位置之间切换O

状态行的行号和列号将有助于了解准确的光标位置。
说明文件:

:help visual-change

vip当光标从段落中间开始时,此功能不起作用。
2013年

哦,我没有注意到,现在,我将编辑答案而不是删除它。
vusan'8

@Antony现在它也可用于vip检查我的编辑。
vusan
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.