Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 使用哪个标记_Vim - Fatal编程技术网

Vim 使用哪个标记

Vim 使用哪个标记,vim,Vim,我正在经历 这个练习要我在正常模式下对当前单词进行大写 我做到了: nnoremap <c-u> mmgUaw`m<esc> nnoremap mmgUaw`m 我用一个标记(m标记)来阻止光标移动 我不喜欢这个解决方案,因为一个纯粹的功能性改变最终会改变vim的全局状态(通过设置一个标记) 是否有更好的方法来实现这一点,或者是否有一个标记(或一组标记)只应由命令/映射使用,而不应以交互方式使用(因为命令/映射会更改它/它们)?Vim帮助中的使用了s寄存器本身,因此您

我正在经历 这个练习要我在正常模式下对当前单词进行大写

我做到了:

nnoremap <c-u> mmgUaw`m<esc>
nnoremap mmgUaw`m
我用一个标记(m标记)来阻止光标移动

我不喜欢这个解决方案,因为一个纯粹的功能性改变最终会改变vim的全局状态(通过设置一个标记)

是否有更好的方法来实现这一点,或者是否有一个标记(或一组标记)只应由命令/映射使用,而不应以交互方式使用(因为命令/映射会更改它/它们)?

Vim帮助中的使用了
s
寄存器本身,因此您的方法不一定是坏的(也就是说,如果映射只是供您自己使用,那么您可以选择一个不用于任何其他用途的寄存器)


话虽如此,这里的特殊backtick(`)寄存器可能更好,因为它是缓冲区的本地寄存器,用于存储最近的跳转点。

这是我想到的最好的方法:

nnoremap <c-u> i<esc>guiw`^
nnoremap igiw`^

在插入模式下利用光标的最后一个位置。

Mathew是正确的,
标记通常用于此类操作。但是,将光标移动到“更改”的开头是常见的行为例如,
gUiw
yiw
>
,等等。因此保存光标位置实际上有点不同寻常。