vi 또는 vim을 사용하여 줄 번호로 지정된 여러 줄의 코드를 주석 처리합니다.

vi 또는 vim을 사용하여 줄 번호로 지정된 여러 줄의 코드를 주석 처리합니다.

나는 그것으로부터 배웠다이 스택 오버플로 질문vi/를 사용하여 vim지정된 범위의 행 번호를 주석 처리 할 수 있습니다 . 예를 들어 다음과 같은 bash 스크립트가 있다고 가정해 보겠습니다.

#!/bin/bash

This
is
my
very
very
great
script

이제 주석 문자를 사용하여 6~8행(단어 및 및 포함)을 주석 처리 very한다고 very가정 great합니다 #. vi/ 에 입력하면 다음을 얻습니다 vim.:6,8s/^/#

#!/bin/bash

This
is
my
#very
#very
#great
script

6~8행은 주석 처리되어 있습니다.

내 질문은 다음과 같은 라이너를 입력하는 것이 가능합니까?제거하다6~8행의 주석 문자 #(파일의 다른 주석 행은 제외)?

vi하지만 실제로 vim. 실제로는 script.sh이 명령을 사용하여 파일을 엽니다 vi script.sh. 또한 명령을 입력하면 이 which vi표시됩니다 /usr/bin/vi. 그러나 간단히 입력 vi하고 키를 누르면 Enter다음과 같은 결과가 표시됩니다.

~                              VIM - Vi IMproved
~
~                               version 7.2.330
~                           by Bram Moolenaar et al.
~                 Vim is open source and freely distributable
~
~                           Sponsor Vim development!
~                type  :help sponsor<Enter>    for information
~
~                type  :q<Enter>               to exit
~                type  :help<Enter>  or  <F1>  for on-line help
~                type  :help version7<Enter>   for version info

이것은 내가 실제로 사용하고 있는 것을 나타내는 것 같습니다 vim. SSH를 사용하여 내 PC에서 원격 Ubuntu Linux 클러스터에 액세스하고 있습니다. 저는 Ubuntu Linux GUI를 사용하고 있지 않습니다.

답변1

당신은 그것을 사용할 수 있습니다 :

:6,8s/^#//

그러나 Block Visual 선택 모드를 사용하는 것이 훨씬 쉽습니다. 6행의 시작 부분으로 이동하여 을 누르고 Ctrl-v8행으로 내려가서 를 누르십시오 x.

게다가"너드 평론가"끼워 넣다.

답변2

vi귀하의 질문에 or 사용이 지정되어 있다는 것을 알고 있지만 vim파일을 수동으로 열지 않고도 이 작업을 수행할 수 있는 몇 가지 다른 옵션은 다음과 같습니다.

  • 진주

    perl -ne 'if($. <=8 && $. >= 6){s/^\s*#//;}print' foo.sh 
    
  • 펄 버전>=5.10

    perl -ne '$. ~~ [6..8] && s/^\s*#//;print' foo.sh 
    

    그러면 파일 내용이 인쇄되어 다른 파일( > new_file.sh)로 리디렉션하거나 i파일의 내부 편집을 사용할 수 있습니다.

    perl -i -ne '$. ~~ [6..8] && s/^\s*#//;print' foo.sh 
    
  • sed

    sed '6,8 s/^ *#//' foo.sh
    

    마찬가지로 원본 파일을 제자리에서 편집하려면 다음을 사용하십시오 i.

    sed -i '6,8 s/^ *#//' foo.sh
    
  • awk/ gawk등:

    gawk '(NR<=8 && NR>= 6){sub("^ *#","")}{print}' foo.sh
    
  • 순수한 bash:

    c=1; while read line; do 
      if [ $c -ge 6 ] && [ $c -le 8 ]; then 
         echo "${line/\#/}"
      else 
         echo $line 
      fi
      let c++; done < foo.sh
    

답변3

vi는 대부분의 GNU/Linux 배포판에서 심볼릭 링크이므로 입력할 때 vim실제로는 .vimvi

주석을 제거하려면 다음을 입력하거나 :6,8s/^#//기호  앞의 일부 선행 공백을 :6,8s/^\s*#//제거하십시오 .#

답변4

을(를) 사용 중일 수 있습니다 vim.tiny. 어쨌든 다음 방법으로 원래 댓글을 삭제할 수 있습니다.

:6,8s/^#//

물론, 다르게 삽입하는 경우(예: 추가 공백 사용), 그 안의 다른 콘텐츠를 제거해야 할 수도 있습니다. 전체 vim을 사용하면 시각적으로 열을 선택하고 문자를 삽입/제거하는 것이 동일한 작업을 수행하는 더 쉬운 방법입니다.

관련 정보