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



所以我键入vip以可视方式选择该段落:



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



,而不是我开始时的期望位置。

请注意,当使用yip以非可视方式拉动选择。

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

评论

是的,我也觉得很烦。我只是倾向于为此目的使用标记:mm“ + yap`m(请注意,” + y会拖到系统剪贴板中)

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

#1 楼

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

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

然后在由于拉动而使光标移动后,请使用ctrlo跳回跳转列表。另外,您还可以通过:jumps查看可用的跳转列表,并使用ctrlo和ctrli浏览该列表。

要总结您的工作流程,将是:




m`


ip




由于使用m`设置了标记,您可以使用''而不是ctrlo跳转到它。

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

评论


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

–乔纳
16-3-3在23:28

@Jonah,我将'映射为`,对我来说效果很好。 (我使用作为负责人。)

– Numeri说恢复莫妮卡
16 Mar 4 '16 at 1:28

@Jonah:正如Numeri所说,映射可以是一个很好的解决方案,否则,如果您想摆脱反引号,可以查看:h'langmap'。我并不是说这是理想的解决方案,但也许对您来说很有趣。

–statox♦
16 Mar 4 '16 at 8:35

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

– Niko Bellic
16-11-22在22:30



#2 楼

您可以使用以下方法避免移动光标:

:'{,'}y


请参阅:help range:help mark-motions:help :y

评论


很高兴知道,但这是您实际上在做什么?似乎敲击带有两个方括号的8个击键比标记解决方案更难

–乔纳
16 Mar 3 '16 at 23:24

如果我在你的位置,那就是我会做的。但是我对您描述的行为没有问题,所以我实际上没有这样做。

– romainl
16 Mar 4 '16 at 7:54

@Jonah您仍然可以选择创建映射。 :nmap :'{,'} y 之类的东西应该可以完成工作。

–statox♦
16 Mar 4 '16 at 8:31

#3 楼


我的光标位于段落的中间


如果您刚刚对其进行了编辑,则最简单的解决方案是键入g;这会将光标定位在最后一个编辑位置。

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

评论


+1:我一直使用'。,但是用g在最后更改之间导航非常有用;和g,

–mMontu
16-3-3在16:26

有g的版本吗?哪个也会将您带到正确的列位置?

–乔纳
16 Mar 3 '16 at 23:19

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

– Al.G.
16 Mar 4 '16 at 8:20



#4 楼

vim-easyclip插件对此进行了设置:


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


为这个小功能安装整个插件有点麻烦,所以我更喜欢根据我的评论使用标记。

#5 楼

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


您在本段的中间。
切换到插入模式。
切换到普通模式。
按vip。
按gi。
切换到普通模式。 (gi会让我们进入插入模式)

如果要开始或结束显示突出显示的文本。

 :help v_o 


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


如果从高到低光标位置开始突出显示(从
较低的行列编号到较高的行列编号),您将
按y保留原始光标位置

如果突出显示从较低的光标位置到较高的光标位置,光标将保持到当前位置。

摇动:gv后返回到原始位置以获取上一个突出显示。

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

状态行的行号和列号将有助于了解准确的光标位置。
/>文档:

:help visual-change


评论


当光标从段落中间开始时,这不适用于VIP。

– Antony
16年8月31日在10:03

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

–武山
16年8月31日在10:57

@Antony现在它也适用于VIP检查我的编辑。

–武山
16 Sep 5'在10:56