gpt4 book ai didi

vim:完成取决于前一个字符

转载 作者:行者123 更新时间:2023-12-04 20:10:08 25 4
gpt4 key购买 nike

我想创建一个映射,该映射将根据光标之前的字符更改 ins-completion。如果字符是 {那么我想要标签完成,如果它是 :我想要正常完成(这取决于完整选项),如果字符是反斜杠加上一些单词( \w+ ),我想要字典完成。我的 ftplugin/tex/latex_settings.vim 中有以下内容文件:

setlocal dictionary=$DOTVIM/ftplugin/tex/tex_dictionary
setlocal complete=.,k
setlocal tags=./bibtags;

function! MyLatexComplete()
let character = strpart(getline('.'), col('.') - 1, col('.'))

if character == '{'
return "\<C-X>\<C-]>"
elseif character == ':'
return "\<C-X>\<C-N>"
else
return "\<C-X>\<C-K>"
endif
endfunction

inoremap <C-n> <c-r>=MyLatexComplete()<CR>

这不起作用,我不知道如何解决它。

编辑:这似乎有效,但我想要一个条件来检查\w+ (反斜杠加任何单词)和最后一个给出消息“找不到匹配项”的条件。
function! MyLatexComplete()
let line = getline('.')
let pos = col('.') - 1

" Citations (comma for multiple ones)
if line[pos - 1] == '{' || line[pos - 1] == ','
return "\<C-X>\<C-]>"
" Sections, equations, etc
elseif line[pos - 1] == ':'
return "\<C-X>\<C-N>"
else
" Commands (such as \delta)
return "\<C-X>\<C-K>"
endif
endfunction

最佳答案

在您的原始函数中,您有错误:

  • strpart()接受字符串、偏移量和 长度参数,而您提供了两个偏移量。
  • col('.')是超过行尾的一个字符。 IE。 len(getline('.'))==col('.')+1意思是strpart(getline('.'), col('.')-1)总是空的。

  • 您已在第二个变体中解决了这些问题。但是如果你想条件检查 \command你不仅需要最后一个字符。因此我建议匹配切片
    let line=getline('.')[:col('.')-2]
    if line[-1:] is# '{' || line[-1:] is# ','
    return "\<C-X>\<C-]>"
    elseif line[-1:] is# ':'
    return "\<C-X>\<C-N>"
    elseif line =~# '\v\\\w+$'
    return "\<C-X>\<C-K>"
    else
    echohl ErrorMsg
    echomsg 'Do not know how to complete: use after {, comma or \command'
    echohl None
    return ''
    endif

    .注意一些事情:
  • 从不使用 ==用于不带 # 的字符串比较或 ?随附的。在这种情况下这无关紧要,但您应该让自己习惯。 ==#==?两者都忽略 'ignorecase' 的值设置(第一个好像设置了 'noignorecase',第二个好像设置了 'ignorecase')。我用的更严格 is# :a is# b就像 type(a)==type(b) && a ==# b .
  • =~ 相同:使用 =~# .
  • 由于向后兼容 string[-1] ( string[any_negative_integer] ) 始终为空。因此我必须使用 line[-1:] .
  • 切勿使用普通 :echoerr .它是不稳定的:你不能确定这是否会破坏执行缺陷( :echoerr 如果放在 :try 块中会破坏执行,否则不会这样做)。 echohl ErrorMsg|echomsg …|echohl None永不中断执行,throw …try|echoerr …|endtry总是打破。
  • 关于vim:完成取决于前一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18601817/

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