我已经为减价链接创建了一个自定义文本对象。我可以在正常模式下对文本对象执行操作(猛拉、删除等),但尝试在脚本或命令模式下执行相同的操作却不起作用。
以下是创建自定义对象的代码:
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'
,但也不起作用。不知道我做错了什么。任何帮助都将不胜感激。
1条答案
按热度按时间w1jd8yoj1#
:help :normal
说:由于您的自定义伪文本对象是一个Map,因此使用
:normal!
调用它实际上并不可行。您只需要删除
normal
之后的刘海: