2013-03-08 2 views
0

외부 문서를 읽고 버퍼의 텍스트로 테스트해야하는 vimscript에서 함수를 만들고 싶습니다. (menu.vim에서) amenu 내가 함수에 동일한 코드를 사용하고 싶지만 그것을 적용하는 방법을 모른다
/^\%(.*\<\%(<C-r>=join(readfile('d:\database.txt'),'\\|')<CR>\)\>\)\@!.*$<CR>amenu에서 vimscript로 코드를 변경하는 방법은 무엇입니까?

:

은에서 잘 작동 코드입니다.
위의 코드는 함수에서 작동하지 않는 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

응 해주셔서 감사합니다. 위의 함수에 답을 입력하고 큰 따옴표 사이의'\ '를'\\'로 변경했지만 작동하지 않았습니다. 코드는 정확하지만 끝 부분에 명령이없는 것처럼 실행되지 않았습니다. 출력 ('echo @ /')을 캡쳐하여 명령 행에 삽입하고 엔터 키를 누르면 잘 동작합니다. – Reman

+0

죄송합니다. '\\'를 큰 따옴표로 묶어 '\\\\'로 변경했습니다. – Reman

+0

발견! 찾은 항목을 강조 표시하려면 'n'키를 눌러야합니다. – Reman

관련 문제