Vim(vimscript)获得光标下的确切字符

Sta*_*ovv 11 vim

我通过以下方式在vimscript中获取光标下的字符:

getline('.')[col('.')-1] 
Run Code Online (Sandbox Code Playgroud)

它完全像它应该的工作,但有一些我不喜欢.考虑这个[]光标.当存在在光标旁边,像这样的支架: }[],][],)[]{[]光标实际上返回支架.我需要设置什么才能始终在光标下正确返回字符,或者如果左边有一个括号则至少忽略?

注意:我怀疑它可能与括号突出显示有关,但我不确定.

注2:对于发生的情况,必须有匹配的括号.

Ing*_*kat 25

虽然我无法重现您正在描述的问题,但您的代码还有另一个问题:由于字符串索引(这是Vimscript的一个较粗糙的方面),它只适用于单字节字符,但无法捕获chars like Ä (depending on the encoding used). This is a better way of capturing the character under the cursor:

:echo matchstr(getline('.'), '\%' . col('.') . 'c.')
Run Code Online (Sandbox Code Playgroud)

Edit: Since about Vim 7.4.1742, Vim has new strgetchar(),并strcharpart()与性格指标工作职能,而不是字节寻址.这在很多情况下都很有用,但在这里不行,因为你仍然只能获得光标的字节索引位置(或者屏幕列的位置virtcol(),但是它与字符索引不同).

  • 如果上面看起来像黑魔法:代码只使用游标的当前列位置作为当前行的字符串表示的索引,并回显该索引处的任何字符.表达式产生```matchstr({currentLineAsStr},"\%{currentColNum} c.")```````%{number} c```是一个成语,引导引擎从{在当前缓冲区中的第二列,或者在我们的情况下,仅在给定字符串中的某个索引处.```.```是正则表达式的唯一捕获组件,当然只是意味着"除了换行符之外的任何单个字符" (6认同)

小智 5

nr2char(strgetchar(getline('.')[col('.') - 1:], 0))
Run Code Online (Sandbox Code Playgroud)

或者

strcharpart(getline('.')[col('.') - 1:], 0, 1)
Run Code Online (Sandbox Code Playgroud)