2013-03-08 29 views
0

我想在vimscript中创建一个函数,它必须读取一个外部文档并用缓冲区中的文本对其进行测试。如何修改amenu的代码到vimscript?

这是在正常工作的代码:AMENU(在menu.vim里)
/^\%(.*\<\%(<C-r>=join(readfile('d:\database.txt'),'\\|')<CR>\)\>\)\@!.*$<CR>

我想使用相同的代码的功能,但不知道如何去适应它。
上述代码包含2个不能在函数中工作的<CR>

1)我该如何适应上面的代码才能使其在vimscript函数中工作?

外部文档将使用输入对话框被插入

function! s:CheckWithDocument()
if !exists("docinput")
let docinput = "Document to match with?"
endif
let a = inputdialog(docinput)
let @/ .....
return
endfunction

我把它在AMENU::call <SID>CheckWithDocument()<CR>

2)我怎样才能在上面vim脚本代码中插入'a'

回答

1

其实它更难。他们使用表达式寄存器<C-r>=来插入一些任意的vimscript,而你可以将它附加到你的搜索字符串中。

let @/ = "/^\\%(.*\\<\\%(".join(readfile('d:\database.txt'),'\\\\|')."\\)\\>\\)\\@!.*$" 

使用相同的方法在需要的地方附加a变量。

+0

谢谢Conner回答。我在上面的函数中插入了你的答案,并将双引号之间的'\'改成了'\\',但它不起作用。该代码是正确的,但没有执行,因为最后没有命令。当我捕获输出('echo @ /')并将其插入命令行时,按下回车键,它可以正常工作。 – Reman 2013-03-09 10:17:48

+0

糟糕我把'\\'改成了双引号之间的'\\\\'。 – Reman 2013-03-09 10:34:42

+0

找到了!我必须按'n'键来突出显示找到的项目。 – Reman 2013-03-09 15:02:23