VIM:`[y`] 丢失了最后一个字符?

VIM:`[y`] 丢失了最后一个字符?

我在 VIM 中遇到了一个问题,它`[y`]提取了和 之间的文本`[`]但丢失了最后一个字符。

重现:

  1. 在正常模式下将光标放在某个单词上。
  2. yiw
  3. 运行:echom @@看看单词是否正确
  4. 按下`[`]查看标记的位置,通常`[在单词的开头,`]在单词的结尾。
  5. `[y`]
  6. 再次运行:echom @@。这次单词被提取出来了,但是最后一个字符丢失了。

对此有什么想法吗?谢谢 :)

(VIM 版本:7.4 和 8.1)

(Gnome Terminal 和 tmux 在 Ubuntu 18.04 和 16.04 上测试)

答案1

这实际上是预料之中的。TL;DR:改用`[v`]y

`[动议为独家动议。请参阅:help mark-motions,其中写道:

使用`(反引号):光标定位在指定位置,并且动作为独家的

改用带有 的可视化模式`[v`]y通常可以工作。它实际上由'selection'选项,但默认为“包含”,因此通常没问题。(如果您想确定,可以在函数内部临时重置它。)

请参阅 Vim 手册中的示例:help g@,其使用:

function! CountSpaces(type, ...)
  let sel_save = &selection
  let &selection = "inclusive"
  ...
  silent exe "normal! `[v`]y"
  ...
  let &selection = sel_save
endfunction

还,本节摘自《Learn Vimscript the Hard Way》,其中简要介绍了该主题。(更重要的是,它使用了相同的习语。您还会在许多 Vim 插件中发现相同的习语。)

相关内容