여러 줄을 따옴표로 묶으세요 Vim

여러 줄을 따옴표로 묶으세요 Vim

다음 형식의 블록이 있습니다.

    String that is not supposed to be enclosed in quotes
    String that is supposed to be enclosed in quotes

    String that is not supposed to be enclosed in quotes
    String that is supposed to be enclosed in quotes

    String that is not supposed to be enclosed in quotes
    String that is supposed to be enclosed in quotes

    String that is not supposed to be enclosed in quotes
    String that is supposed to be enclosed in quotes

따옴표로 묶어야 한다고 명시한 줄을 따옴표로 묶어야 합니다.

    String that is not supposed to be enclosed in quotes
    "String that is supposed to be enclosed in quotes"

    String that is not supposed to be enclosed in quotes
    "String that is supposed to be enclosed in quotes"

    String that is not supposed to be enclosed in quotes
    "String that is supposed to be enclosed in quotes"

    String that is not supposed to be enclosed in quotes
    "String that is supposed to be enclosed in quotes"

Vim에서 이 작업을 수행하는 반자동 방법이 있나요? 가능한 해결책에는 g명령이 포함될 수 있다고 생각합니다.

답변1

정규 표현식을 사용하세요:

:%s/.*is supposed.*/"&"/

"반자동"이 각 교체 전에 메시지를 표시하려는 경우 /c교체 패턴에 수정자를 추가하기만 하면 됩니다.

:%s/.*is supposed.*/"&"/c

설명하다

  • :%s이 대체 항목을 현재 버퍼의 모든 라인에 적용한다는 의미입니다.
  • 우리가 일치하는 패턴은 단어를 포함하는 모든 행입니다 is supposed(다른 행에 "is Should"라는 단어가 포함되고 "to be return in quote"가 뒤에 오는 경우 언제든지 패턴을 다음으로 변경할 수 있습니다)..*is supposed to be enclosed in quotes.*
  • 일치하는 패턴을 대체하는 데 사용하는 문자열은 일치하는 패턴을 나타내는 "&"위치 입니다.&

답변2

유명한서라운드 사운드 플러그인이 프로세스를 빠르고 쉽게 수행할 수 있도록 다양한 매핑이 제공됩니다. 들여쓰기 없이 전체 줄을 인용하려면 다음을 사용하여 예제 텍스트와 일치하는 모든 줄에 자동으로 적용 yss"할 수 있습니다 .:global:normal

:g/is supposed/normal yss"

아니면 일치하는 줄을 검색하고 n다음을 반복하세요..

답변3

나는 거의 항상 매크로를 사용하여 대안을 검색하는 것을 선호합니다. 매크로는 더 강력하고 기억하기 쉬우면서도 점프하기 전에 대화식으로 확인할 수 있는 옵션을 유지하기 때문입니다. 변경하려는 첫 번째 줄에 다음을 시도해 보십시오(가독성을 높이기 위해 ESC 및 ENTER 주위에 공백을 입력하지 마십시오).

qqI" ESC $bea" ESC /is supposed ENTER zzq

할 수 있는 작업:

  • qq"q"라는 매크로를 시작합니다. (qa는 "a" 매크로를 시작합니다)
  • I" ESC"0"처럼 줄의 시작 부분이 아닌 첫 번째 단어 앞에 "를 삽입하여 일반적으로 중요한 공백을 유지합니다.
  • $bea" ESC줄의 끝으로 이동($)한 다음 한 단어 뒤로 이동(b)하고 다시 줄의 끝으로 이동(e)하고 마지막으로 (a) "를 추가합니다. 이는 심지어 줄의 마지막 단어에도 추가됩니다. 일반적인 쓸모없는 후행 공백이 뒤에 오는 경우 줄입니다.
  • /is supposed편집을 수행한 후 이 검색은 여러 페이지 아래에 있을 수 있는 "is Should"의 다음 인스턴스를 검색하고 사용자가 검토하고 편집을 계속할지 여부를 결정할 수 있도록 해당 위치에 커서를 놓습니다. "should"가 발견되지 않으면 매크로는 손상 없이 종료됩니다.
  • zzq현재 행 너머의 여러 행을 볼 수 있도록 행을 페이지 중앙에 잘 배치합니다(zz). 매크로를 빠르게 적용하고 이전 작업을 찾아보고 싶을 때 유용합니다. "q"는 "q"라고도 불리는 매크로의 정의를 끝냅니다.

사용하는 방법:

  • 위의 매크로 정의를 완료한 후 첫 번째 줄이 변경되었습니다.
  • 오류가 발생하면 해당 줄을 취소하고 다시 시도하면 됩니다.
  • 이제 커서는 두 번째 일치 항목(있는 경우)에 있으며 페이지 중앙에 잘 배치됩니다.
  • 원하는 경우 @q를 사용하여 이 매크로(또는 기타 유사한 매크로!)를 적용할 수 있습니다. 이 매크로는 라인을 편집하고 세 번째 일치 항목에 위치를 지정합니다.
  • @@를 사용하여 마지막 매크로를 다시 적용할 수 있습니다(@q보다 빠릅니다).
  • 동시에 여러 전화를 걸 수 있습니다(예: 111@@). 매크로를 적용하는 동안 오류가 발생하면 해당 오류는 반복되지 않습니다.
  • 또는 PageDown과 친구들을 수동으로 건너뛰고 매크로를 다시 적용할 수 있습니다.
  • 다른 편집 내용과 함께 매크로를 인터리브할 수 있습니다.
  • :tab을 사용하여 이 매크로를 다른 버퍼나 파일에 적용할 수 있습니다.
  • 파이 위에 체리: vim을 종료한 후에도 매크로가 기억됩니다!

매크로에 익숙해지면 놀라운 힘을 갖게 될 것입니다!

답변4

행이 실제로 다음과 같고 어떤 행인지 식별하는 구별되는 문자열이 있는 경우 정규식 버전이 작동합니다. 그렇지 않으면 로그를 남길 수 있습니다.매크로당신이 원하는 것을하십시오.

이렇게 하려면 두 번째 줄의 시작 부분으로 이동하여 다음을 누르세요.

qq I" Escape A" Escape 3j q

이는 첫 번째 줄을 참조하고 살펴볼 다음 줄로 이동합니다. 그런 다음 @q을 눌러 방금 수행한 모든 작업을 다시 재생하거나 5@q5회 수행 할 수 있습니다 .

작동 원리: q매크로 기록을 시작하는 명령이며 이를 호출하기도 합니다 q(어떤 문자든 선택할 수 있음). 이 매크로에서는 줄 시작 부분에 큰따옴표( )를 삽입 하고 삽입 모드(Escape)를 종료한 다음 줄 끝에 I"큰따옴표( )를 추가 하고 다시 삽입 모드를 종료합니다. 참조하려는 다음 줄로 A"세 줄( ) 아래로 이동합니다 . 매크로 기록을 중지합니다.3jq

그 후에는 시작했던 곳으로 돌아가서 @저장된 매크로( )를 실행하여 q다음 줄에 대해 다시 수행할 수 있습니다. @예를 들어 에서 이전에 계산하려면 5@q여러 번 수행합니다.


3j간격이 약간 불규칙한 경우 다음을 사용할 수 있습니다 }}k. 두 문단을 아래로 이동하여 다음 문단 뒤의 빈 줄(}}) 및 백업( k). 어느 쪽이든 매크로 실행은 동일합니다.

실제로 원하는 작업을 수행하고 원하는 위치로 돌아갈 수 있는 일련의 작업을 기록할 수 있습니다. 수행하려는 단계가 실행하려는 모든 상황에서 의미가 있는 한 매크로를 시작하고 원하는 모든 변경을 수행한 후 다음 위치로 이동한 후 매크로를 중지하고 반복할 수 있습니다.

관련 정보