2013-03-08 2 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) Как я могу вставить 'a' в коде выше vimscript?

ответ

1

Это на самом деле сложнее в другую сторону. Они используют регистр выражений <C-r>= для вставки некоторого произвольного vimscript, тогда как вы можете просто добавить его в свою строку поиска.

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

Используйте тот же метод для добавления a переменных, в которой вы хотите.

+0

Спасибо Коннер за ответ. Я вставил ваш ответ в функцию выше и изменил '\' между двойными кавычками на '\\', но это не сработало. Код верный, но он не был выполнен, как будто в конце не было команды . Когда я беру вывод ('echo @ /') и вставляю его в командной строке, нажимаем клавишу ввода, он отлично работает. – Reman

+0

К сожалению, я изменил '\\' на '\\\\' между двойными кавычками. – Reman

+0

Нашли это !!! Я должен нажать клавишу 'n', чтобы выделить найденные элементы. – Reman

Смежные вопросы