我想尝试编写一些简单的VIM插件。我想到的是涉及采用当前的视觉选择,处理该字符串然后用结果替换选择。稍后我想尝试扩展它以使用文本对象和范围。
具体来说,我想知道如何:
答案 0 :(得分:7)
有不同的方法可以做到这一点。下面是一个。假设您想获得当前选择的价值并以某种方式使用它来决定要替换的新字符串;如果新字符串完全独立,您可以在下面执行一两步:
"map function to a key sequence in visual mode
vmap ,t :call Test()<CR>
function! Test()
"yank current visual selection to reg x
normal gv"xy
"put new string value in reg x
" would do your processing here in actual script
let @x = @x . 'more'
"re-select area and delete
normal gvd
"paste new string value back in
normal "xp
endfunction
答案 1 :(得分:0)
我必须备份光标位置才能在选择文本后正常工作:
function! Test()
"yank current visual selection to reg x
normal! gv"xy
"get current column position
let cursor_pos = getpos('.')
"subtract 1
let cursor_pos[2] = cursor_pos[2] - 1
"put new string value in reg x
" would do your processing here in actual script
let @x = @x . 'more'
"re-select area and delete
normal gvd
"set cursor back one
call setpos('.', cursor_pos)
"paste new string value back in
normal "xp
endfunction
也许其他人的Vim粘贴功能配置与我不同,但除非我使用此功能,否则所选/更改的文本会在粘贴时向前移动。
更新:不幸的是,这仍不适用于在行首选择的文本。