the*_*ark 2 vim code vimscript
我想显示当前行所属的 C 函数。我不想使用任何插件,因为我在具有不同机器功能和配置的多个操作系统上工作。我已经尝试了大多数插件,但由于某种原因它不起作用。我必须写一些非常基本和最小的东西,并且可以使用非常基本的 vim 功能。
当前解决方案:
我从同事那里复制了一个 vim 函数,它本质上是搜索一个 reg-ex,匹配函数名的开头。它在底部屏幕上显示名称几秒钟然后消失
fun! ShowFuncName()
let lnum = line(".")
let col = col(".")
echohl ModeMsg
echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bW'))
echohl None
call search("\\%" . lnum . "l" . "\\%" . col . "c")
endfun
Run Code Online (Sandbox Code Playgroud)
问题
问题是这个东西不适用于标签。如果函数定义和当前行之间的一行中存在标签,脚本将显示标签名称而不是函数名称。
否则脚本会起作用,因为在我们的代码库中,始终从第 1 列开始函数定义并从第二行开始使用大括号是一个硬性规定。
建议修复
与其搜索正则表达式,不如使用 vim 移动键。即执行以下操作:
我不知道如何做上面提到的第 2 步。
我相信你想要这个
function! ShowFuncName()
let cursor_pos = getpos('.')
echohl ModeMsg
normal! [[k
echo getline('.')
echohl None
call setpos('.', cursor_pos)
endfunction
Run Code Online (Sandbox Code Playgroud)
该normal命令[[k在正常模式下执行,将光标移动到函数定义。然后它打印光标所在的行。
光标位置恢复到原来使用getpos()和setpos()功能的位置。
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |