如何在Vim中使用全局标记?

cwdobuhd  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(90)

如何将标记也用作全局缓冲区?
标记是a-z,所以我真的没有必要为buffer-only标记保留双引号,因为我没有超过几个标记/ buffer。
所以我几乎总是希望有全局标记,但mamA更容易输入,'a'A也是如此。

zc0qhyus

zc0qhyus1#

你可以通过它的外观来Map它们。例如在你的vimrc中

nnoremap ma mA
nnoremap 'a 'A
nnoremap `a 'A

字符串
尽管我怀疑这种方法可能会使不使用nnoremap的插件出错。

qcuzuvrc

qcuzuvrc2#

我花了很多时间寻找合适的解决方案,但一无所获,所以我回到michael的答案背后的想法,写了这个小脚本。

-- Use lowercase for global marks and uppercase for local marks.
local low = function(i) return string.char(97+i) end
local upp = function(i) return string.char(65+i) end

for i=0,25 do vim.keymap.set("n", "m"..low(i), "m"..upp(i)) end
for i=0,25 do vim.keymap.set("n", "m"..upp(i), "m"..low(i)) end
for i=0,25 do vim.keymap.set("n", "'"..low(i), "'"..upp(i)) end
for i=0,25 do vim.keymap.set("n", "'"..upp(i), "'"..low(i)) end

字符串
这将创建所有26个字母的重新Map,以便:

  • m<lowercase>创建新的全局标记
  • m<uppercase>创建新的本地标记
  • '<lowercase>达到全球标记
  • '<uppercase>转到本地标记

我更喜欢在我的配置文件中添加4x26行
注意,在lua中,vim.keymap.set默认是“非递归”的,这就是为什么你可以把vim.keymap.set替换为vim.keymap.set,反之亦然。
如果你不使用lua,你可以用Vim脚本编写前面的脚本,如下所示:

lua << EOF
script here
EOF

相关问题