创建一个Vim函数,用用户输入字符串作为一系列行的前缀



我想创建一个Vim函数,用一些文本为所有选定的行加前缀(这比使用Ctrl-V1

我没有编写脚本的经验,发现了这篇很棒的文档和这个问题:

  • 编写Vim编辑器的脚本,第1部分:变量、值和表达式–IBM Developer
  • 如何在Vim中的多行中插入行中间的文本

我想,我将使用input函数来获取要作为前缀的文本,然后使用:'<,'>s/^/‹prefix_text›/命令来进行实际的前缀,但我不知道如何将‹prefix_text›作为插入替换表达式的变量。

我尝试了这个非常天真的解决方案(显然,它不起作用,因为它只将input("Enter prefix text: ")附加到当前行):

" Prefix lines
command PrefixLines call <SID>PrefixLines()
function! <SID>PrefixLines()
    '<,'>substitute/^/input("Enter prefix text: ")/
endfunction

谢谢你的帮助!

您可以使用Vim替换表达式允许替换字符串成为结果的功能计算Vimscript表达式。(参见:help :s=:help s/=了解详细信息。)

在您的情况下,表达式可能简单到引用设置为所需前缀字符串的局部变量的值通过input():

command! -range -bar Prepend <line1>,<line2>call PrefixLines()
function! PrefixLines() range
    call inputsave()
    let t = input('Prefix: ')
    call inputrestore()
    exe a:firstline.','.a:lastline 's/^/=t'
endfunction

最新更新