Vim에서 검색을 건너뛰고 제목 뒤의 내용 바꾸기

Vim에서 검색을 건너뛰고 제목 뒤의 내용 바꾸기

패턴을 바꿔야 하는데 특정 단어 뒤에 오는 패턴을 바꾸고 싶지 않습니다.

이것은 내 프로그램입니다:

:vnoremap   ::silent! call Bib()

function! Bib()
   %s/\s*\n*{\\&}\s*\n*/ /g
   %s/\([A-Z]\)\.\([A-Z]\)\./\1\. \2\./g
   "%s/\(\w*\-\w*\|\w*\),\s*\n*\([A-Z]\)\./\r\\snm{\1}\r\2\./g 

endfunc

특정 단어 뒤에 이 검색 패턴이 사용되는 것을 원하지 않습니다: "references"

답변1

"뭔가"를 일치시키지만 특정 "단어" 뒤에는 일치하지 않으려면 \@<!;

/\(word\)\@<! something/

"something"을 "somethingelse"로 바꾸십시오. 단, "something"이 "word" 뒤에 오지 않는 경우에만 해당됩니다.

:%s/\(word\)\@<! something/ somethingelse/


내부에서 vim설명 표시 :help /\@<!:

\@<!    Matches with zero width if the preceding atom does NOT match just
    before what follows.  Thus this matches if there is no position in the
    current or previous line where the atom matches such that it ends just
    before what follows.  |/zero-width| {not in Vi}
    Like "(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
    The match with the preceding atom is made to end just before the match
    with what follows, thus an atom that ends in ".*" will work.
    Warning: This can be slow (because many positions need to be checked
    for a match).  Use a limit if you can, see below.

답변2

당신은 %사용해 볼 수 있습니다범위주소:

0,/^References$/s/\s*\n*{\\&}\s*\n*/ /g
0,/^References$/s/\([A-Z]\)\.\([A-Z]\)\./\1\. \2\./g
0,/^References$/s/\(\w*\-\w*\|\w*\),\s*\n*\([A-Z]\)\./\r\\snm{\1}\r\2\./g

(이 References단어가 줄의 유일한 단어라고 가정합니다. 필요에 따라 정규식을 수정합니다.)

관련 정보