vim 无法从脚本对自定义文本对象执行操作(删除、删除等)

kb5ga3dv  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(161)

我已经为减价链接创建了一个自定义文本对象。我可以在正常模式下对文本对象执行操作(猛拉、删除等),但尝试在脚本或命令模式下执行相同的操作却不起作用。
以下是创建自定义对象的代码:

function! markdown#InLink()
    let l:magic = &magic
    set magic

    let l:currentLineNumber = line('.')

    " markdown link regex pattern
    let l:pattern = '\[[^\]]\+\]([^)]\+)'

    " move cursor to end of the markdown link
    if (!search(l:pattern, 'ce', l:currentLineNumber))
        " if it fails, there was not match on the line, so return prematurely
        return
    endif

    " start visually selecting from end of the markdown link
    normal! v

    " move cursor to beginning of the markdown link
    call search(l:pattern, 'cb', l:currentLineNumber)

    " restore magic
    let &magic = l:magic
endfunction

xnoremap <silent> il :<c-u>call markdown#InLink()<cr>
onoremap <silent> il :<c-u>call markdown#InLink()<cr>

下面是我试图删除减价链接的函数:

function! markdown#YankLink()
    normal! yil
endfunction

nnoremap <buffer> <Leader>yl :call markdown#YankLink()<CR>

<Leader>yl不会删除链接,但在正常模式下按下yil可以正常工作。我也试着从命令模式下按下:execute 'normal! yil',但也不起作用。不知道我做错了什么。任何帮助都将不胜感激。

w1jd8yoj

w1jd8yoj1#

:help :normal说:

If the [!] is given, mappings will not be used.

由于您的自定义伪文本对象是一个Map,因此使用:normal!调用它实际上并不可行。
您只需要删除normal之后的刘海:

function! markdown#YankLink()
    normal yil
endfunction

相关问题