gpt4 book ai didi

vim - Vim 中的 CamelCase 扩展类似于 Intellij Idea?

转载 作者:行者123 更新时间:2023-12-04 17:57:03 29 4
gpt4 key购买 nike

在 Intellij Idea 中,有一个功能。假设我使用了一个变量 myCamelCase在我的代码中的某个地方。然后如果我输入 mCC并按 Ctrl-Enter 或某些此类组合键,它会扩展为 myCamelCase . Vim 中有类似的东西吗?

最佳答案

好的,请原谅我回答了两次,但由于我的第一次尝试没有捕获要点,我再试一次。这比我想象的要复杂,但可能没有我想象的那么复杂(!)。

现在修改为建议所有匹配的变量名称。

首先,这是一个从“myCamelCase”字符串生成“mCC”缩写的函数:

function! Camel_Initials(camel)
let first_char = matchstr(a:camel,"^.")
let other_char = substitute(a:camel,"\\U","","g")
return first_char . other_char
endfunction

现在,这里有一个函数,它接受一个缩写 ('mCC') 并扫描当前缓冲区(从当前行向后)以查找具有该缩写的“单词”。 返回所有匹配的列表:
function! Expand_Camel_Initials(abbrev)
let winview=winsaveview()
let candidate=a:abbrev
let matches=[]
try
let resline = line(".")
while resline >= 1
let sstr = '\<' . matchstr(a:abbrev,"^.") . '[a-zA-Z]*\>'
keepjumps let resline=search(sstr,"bW")
let candidate=expand("<cword>")
if candidate != a:abbrev && Camel_Initials(candidate) == a:abbrev
call add( matches, candidate )
endif
endwhile
finally
call winrestview(winview)
if len(matches) == 0
echo "No expansion found"
endif
return sort(candidate)
endtry
endfunction

接下来,这是一个自定义完成函数,它读取光标下的单词并建议上述函数返回的匹配项:
function! Camel_Complete( findstart, base )
if a:findstart
let line = getline('.')
let start = col('.') - 1
while start > 0 && line[start - 1] =~ '[A-Za-z_]'
let start -= 1
endwhile
return start
else
return Expand_Camel_Initials( a:base )
endif
endfunction

要使用它,您必须定义“completefunc”:
setlocal completefunc=Camel_Complete

要使用插入模式完成,请键入 CTRL-X CTRL-U,但我通常将其映射到 CTRL-L:
inoremap <c-l> <c-x><c-u>

使用 vimrc 中的这段代码,您应该会发现输入 mCC后跟 CTRL-L 将进行预期的替换。如果没有找到匹配的扩展,则缩写不变。

该代码不是防水的,但它适用于我测试的所有简单情况。希望能帮助到你。如果有什么需要说明的,请告诉我。

关于vim - Vim 中的 CamelCase 扩展类似于 Intellij Idea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6548541/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com