我在 VIM 中遇到了一个问题,它`[y`]
提取了和 之间的文本`[
,`]
但丢失了最后一个字符。
重现:
- 在正常模式下将光标放在某个单词上。
- 按
yiw
- 运行
:echom @@
看看单词是否正确 - 按下
`[
和`]
查看标记的位置,通常`[
在单词的开头,`]
在单词的结尾。 - 按
`[y`]
- 再次运行
: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 插件中发现相同的习语。)