검색에서 첫 번째 일치를 반환하는 방법
Aug 21 2020
vim의 일부 검색 패턴에 대한 내 질문 에 따라 커서 위치를 포함하고 여러 줄인 검색 패턴의 첫 번째 일치 항목 (있는 경우)에 해당하는 텍스트를 얻고 싶습니다 .
다음은 텍스트 예제입니다 (마크 다운 파이썬 셀).
```python
x = 10
```
```python
[p]rint(x)
```
가 []
커서 높은 게재 순위를 나타냅니다.
내 검색 패턴 :
\(```python\n\)\@<=\%(\%(```\)\@!\_.\)*\%#\_.\{-}\(```\)\@=
Wich는 텍스트에 해당합니다 print(x)
.
그래서 기본적으로이 텍스트를 추출하여 vimscript의 변수에 저장하고 싶습니다.
감사합니다.
답변
4 NickSkywalker Aug 22 2020 at 14:26
그래서 나는 그것이 gn
내가 필요로하는 것을 발견했습니다 에서 :help gn
:
n과 같이 마지막으로 사용한 검색 패턴을 앞으로 검색하고 비주얼 모드를 시작하여 일치하는 항목을 선택하십시오. 커서가 일치 항목에 있으면 시각적으로 선택합니다. 운영자가 보류중인 경우 경기에서 작동합니다.
즉, yank와 결합하여 레지스터의 텍스트를 변수로 가져올 수 있습니다.
그래서 패턴과 일치하는 텍스트를 얻는 함수를 만들었습니다.
function! GetMatch(pattern)
get matched = search(a:pattern)
if l:matched
" save register content
let savereg = @9
normal "9ygn
let match = @9
" restore register content
let @9 = l:savereg
else
let match = ""
endif
return l:match
endfunction
업데이트 : 테스트가없는 다른 버전 :
function! GetMatch(pattern)
let found = search(a:pattern)
" save register content
let savereg = @9
normal "9ygn
let match = @9
" restore register content
let @9 = l:savereg
return l:match
endfunction
1 eyalkarni Aug 22 2020 at 05:05
약간 과잉이지만 일치하는 패턴 그룹을 기반으로 파이썬 명령을 실행하는 방법을 참조하십시오 .
패턴 (첫 번째 일치 그룹)을 기반으로 python 명령을 실행할 수 있습니다. 여기에 vim 변수를 설정했습니다.
:%GL/PATTERN/py vim.command("let var='" + match + '"')
일부 이스케이프 문제가 발생할 수 있습니다.