developer tip

/ in vi 검색 및 바꾸기?

optionbox 2020. 11. 29. 10:14
반응형

/ in vi 검색 및 바꾸기?


vi에서 검색 및 바꾸기, '/'(슬래시)를 이스케이프하여 정확합니다. 경로를 말하십시오.

같은 : / Users / tom / documents / pdfs /

:%s//Users/tom/documents/pdfs//<new text>/g  --FAILS (obviously)

:%s/\/Users/tom/documents/pdfs\//<new text>/g -- FAILS with a trailing error

:%s/'/Users/tom/documents/pdfs/'/<new text>/g -- FAILS with a trailing error

내가 무엇을 놓치고 있습니까?


내부적으로도 슬래시를 이스케이프해야합니다.

:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g

또는 할 수 있습니다 :%s,foo/bar/baz,foo/bar/boz,g-나는 혼란을 피하기 때문에 슬래시를 거의 사용 하지 않습니다 .


Sarah가 제안했듯이 모든 슬래시를 이스케이프해야합니다.

대신 슬래시 이외의 다른 문자를 구분 기호로 사용할 수 있습니다. 이것은 검색 문자열에 많은 슬래시가있는 경우에 편리합니다.

:%s#/Users/tom/documents/pdfs/#<new test>#g

이것은 vim에서 완벽하게 작동합니다. 나는 바닐라 vi에 대해 100 % 확신하지 못합니다.


나는이 질문이 몇 년 전이라는 것을 알고 있지만 더 쉬운 해결책을 찾기 위해이 질문에 착수 할 수있는 다른 사람들을 위해 2014 년에는 "!"와 같은 다른 것으로 "/"구분 기호를 대체 할 수 있습니다. 다음과 같이 앞, 중간, 뒤 :

:%s!foo/bar/baz!foo/bar/boz!g

Meder의 대답과 매우 유사합니다 ... 그러나 느낌표가 구분 기호로보기가 훨씬 더 쉽다는 것을 알았습니다. 이 방법이 Mac OSX Mavericks에서 사용하고있는 VIM의 현재 버전에서 여전히 작동하는지 확인하고 싶었습니다.


?검색에 사용할 수 있습니다.

레지스터에서 패턴을 검색하고 패턴에 '/'문자가 포함 된 경우 일반 모드에서 ?명령 대신 /명령을 사용 하여 패턴 일치를 시작할 수 있습니다. 이 경우 '/'문자에 더 이상 이스케이프가 필요하지 않습니다. (하지만 이제 '?'문자를 이스케이프해야합니다.)

?의 반대 방향으로 검색 /하므로 검색 방향이 마음에 들지 않고 검색 패턴에 '?'가 포함되지 않은 경우 숯.

또한 escape()더 많은 것을 원한다면 스크립트를 확인하십시오 .


Windows는 디렉토리에 백 슬래시를 사용하고 Linux는 디렉토리에 슬래시를 사용합니다. Vim은 운영 체제에서 작동하는 텍스트 편집기입니다. 두 OS 모두 슬래시가 사용되는 방식과 관련하여 디렉토리 경로 해석이 다르기 때문에 Vim은 Windows 트위스트 방법을 해석하는 방법이 필요합니다.

LINUXFORWARD 대 WINDOWSBACK (디렉토리 슬래시)

  • 슬래시는 Windows에서 문자 그대로 역순이며 Linux에서는 쉽게 표시됩니다.
    • Windows :
    • C:\Program Files (x86)\Microsoft OneDrive\
    • 리눅스 :
    • /usr/bin

해결책

나는 Linux PC가 아니기 때문에 Windows에서 Vim의 찾기 및 바꾸기에 대한 어려움을 말할 수 있습니다.

  • 수정은 이중 백 슬래시입니다.
    • 좋은:
    • :%s/c:\\Program Files (x86)\\Microsoft OneDrive\\/annoyancereplaced/g
    • 나쁜:
    • :%s/c:\Program Files (x86)\Microsoft OneDrive\/unabletoreplaceannoyance/g
노트
  • Windows가 두 개의 슬래시 사용 하는 네트워크 경로작업하는 경우 \\이는 모든 백 슬래시에 대해 항상 균등하게 유지되므로 또 다른 백 슬래시가 있어야 함을 의미합니다.
    • 예 : 네트워크 경로 : \\Foo\Bar\
    • %s/C:\\Program Files (x86)\\foo\\bar/\\\\Foo\\Bar\\
    • 주목 \\\\

참고 URL : https://stackoverflow.com/questions/1684628/in-vi-search-and-replace

반응형