在Vim脚本/插件中,如何用可视选择字符串替换新字符串?

时间:2010-12-18 21:00:01

标签: vim

我想尝试编写一些简单的VIM插件。我想到的是涉及采用当前的视觉选择,处理该字符串然后用结果替换选择。稍后我想尝试扩展它以使用文本对象和范围。

具体来说,我想知道如何:

  • 从当前字符选择中获取字符串
  • 删除选择
  • 插入我的新字符串

2 个答案:

答案 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粘贴功能配置与我不同,但除非我使用此功能,否则所选/更改的文本会在粘贴时向前移动。

更新:不幸的是,这仍不适用于在行首选择的文本。