键入')'时光标向右移动,并且光标下的字符为')'

时间:2020-06-27 21:43:21

标签: vim

我正在尝试使用.vimrc中的vim设置和vim函数的组合,以在输入')'时使光标向右移动(如果已经存在')'的话)。到目前为止,我已经尝试将以下内容添加到我的.vimrc文件中:

inoremap ) <Esc>:source PATH/TO/Function.vim<Enter>

Function.vim类似于

if getline('.')[col('.')] == ')'
    " move cursor two spaces right and re-enter insert mode
else
    " move cursor one space right, enter insert mode, type ')'
endif

我可以使用哪些命令来操作.vim脚本文件中的光标?我应该完全使用其他方法吗?预先感谢!

2 个答案:

答案 0 :(得分:1)

我很确定这是重复的。

所有有关光标位置的信息。当光标位置从1开始而字符串索引从0开始时,需要负1的偏移量。另外,:imap-<expr>可以简化操作(因为没有光标远距传送),i_CTRL-G_U也可以使映射可重新移动。最后,这就是所有包围式插件的作用,这里是mine

inoremap <silent><expr> ) getline('.')[col('.')-1] == ')' ? '<c-g>U<right>' : ')'

PS:您当然不想在这里来源文件。这将是非常过分的,并且在某些不幸的情况下会非常缓慢。

答案 1 :(得分:1)

您可以使用此:

inoremap <expr> ) getline('.')[col('.')-1]==')' ? '<c-g>U<right>' : ')'

<expr>标签告诉vim将)映射到右侧表达式的结果。在此,如果光标下方的符号是(,它将是<right>,否则它将打印)