Vim 매뉴얼에 따르면
:[range]v[global]/{pattern}/[cmd] Execute the Ex command [cmd] (default ":p") on thelines within [range] where {pattern} does NOT match."
그러나 ": v / {pattern1} /, / {pattern2} / [cmd]"와 같은 명령을 사용하면 결과가 내가 원하는 것이 아니고 이유를 이해할 수 없습니다.
exapler에게는 텍스트 파일이 있습니다.
1
2
3
4
5
": g / 2 /, / 4 / d"명령을 실행하면 "2"에서 "4"까지의 줄이 삭제됩니다. 괜찮아.
하지만 ": v / 2 /, / 4 / d"명령을 실행하면 내가 아는 것처럼 작동하지 않습니다.
"2"에서 "4"까지 세 줄을 유지하고 다른 줄은 삭제해야한다고 생각합니다.
또는 ": v / 2 /, / 4 / d"명령이 ": g / [^ 2] /, / [^ 4] / d"처럼 작동 할 수 있다고 생각하지만 그렇지 않습니다.
그렇다면 ": v / {pattern1} /, / {pattern2} / [cmd]"명령에 대한 정확한 의미는 무엇입니까?
명령은해야 할 일을합니다. 명령을 제대로 이해하지 못한 것 같습니다. 나는 그것을 설명하려고 노력한다.
첫째, :g
하나. 다음 :g/p1/,/p2/d
과 같이 명령을 읽어야합니다.
:g/p1/ "for each line match p1
,/p2/d "till line match p2, delete.
여기에서는 줄 일치 p1
에서 ( ,
쉼표) 줄 일치 까지 범위를 사용했습니다 p2
. 귀하의 1-5
예에서 vim은 첫 번째 일치하는 줄 #2
을 찾은 다음 2,/4/d
, 그래서 2-4 줄이 제거되었습니다. :g
완료되지 않은 경우 나머지 줄을 찾습니다. 5
줄, 일치하지 않음 /2/
, 다음 줄, 죄송합니다. EOF를 쳤으므로 :g
작업을 완료했습니다.
에서 예제를 1 to 20
만들면 msg 오류가 표시됩니다 Pattern not found
. 이는 :g
can find /2/
이지만 범위 끝을 /4/
더 이상 찾을 수없고 마지막 d
명령 으로 제거 되었기 때문에 발생합니다 . 혼자서 테스트를하면 내가 의미하는 바를 알 수있을 것입니다.
경우 :g
분명하다, :v
이해하기 쉽다.:v/2/,/4/d
vim search first line이 일치하지 않습니다 /2/
. 첫 번째 줄이 1
되고 do 1,/4/d
, 즉 1-4 번째 줄 이 삭제됩니다. :v
명령이 아직 완료되지 않은 경우 5
라인 번호가 1 인 라인으로 이동합니다. 이제 라인 번호 1 /2/
과도 일치하지 않으므로 vim을 사용하고 a 1,/4/d
를 수행하지만 /4/
버퍼에 라인 일치 가 없으므로 pattern not found
오류 메시지가 표시됩니다. 표시됩니다. 그리고 :v
명령은 그 일을 끝냈습니다.
:g/{pattern}/cmd
이 아니라는 점을 명심해야합니다 :g{range}cmd
. 패턴 과 범위 는 다릅니다. A는 않습니다 :h range
세부 사항을 볼 수
그것이 당신이 결과를 얻은 이유입니다. 분명하기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다