[vim] Vim에서 줄을 주석 처리하거나 주석 처리를 해제하는 빠른 방법은 무엇입니까?

vi에 Ruby 코드 파일이 열려 있는데 주석 처리 된 행이 있습니다 #.

class Search < ActiveRecord::Migration
  def self.up
    # create_table :searches do |t|
    #   t.integer :user_id
    #   t.string :name
    #   t.string :all_of
    #   t.string :any_of
    #   t.string :none_of
    #   t.string :exact_phrase
    #
    #   t.timestamps
    # end
  end

  def self.down
    # drop_table :searches
  end
end

첫 번째 def ... end섹션 의 모든 줄을 주석 해제하고 싶다고 가정 해보십시오 . Vim에서 효율적인 방법은 무엇입니까?

일반적으로 줄을 주석 처리하고 주석 처리를 제거하는 쉽고 유동적 인 방법을 찾고 있습니다. 여기서는 루비 코드를 다루고 있지만 JavaScript ( //) 또는 Haml ( -#) 일 수 있습니다.



답변

NERD Commenter 스크립트를 사용합니다 . 코드에서 주석을 쉽게 주석 처리하거나 주석을 해제하거나 토글 할 수 있습니다.

의견 에서 언급했듯이 :

사용법에 혼란을 겪는 사람이라면 기본 리더는 “\”이므로 10 \ cc는 열 줄을 주석 처리하고 10 \ cu는 열 줄을 주석 해제합니다


답변

이러한 작업에는 대부분의 시간 블록 선택을 사용 합니다.

첫 번째 #문자 에 커서를 놓고 CtrlV(또는 CtrlQgVim의 경우)를 누르고 마지막 주석 행까지 내려 가서를 누르면 x모든 #문자가 세로로 삭제됩니다 .

텍스트 블록을 주석 처리하는 것은 거의 동일합니다.

  1. 먼저 주석을 달고 싶은 첫 번째 줄로 이동하여을 누릅니다 CtrlV. 에디터가 VISUAL BLOCK모드 에 놓 입니다.
  2. 그런 다음 화살표 키를 사용하여 마지막 줄까지 선택하십시오.
  3. 이제을 누르면 ShiftI편집기가 INSERT모드로 전환되고을 누릅니다 #. 첫 번째 줄에 해시가 추가됩니다.
  4. 그런 다음 Esc(1 초만) 누르면 #선택한 다른 모든 줄에 문자 가 삽입 됩니다.

기본적으로 debian / ubuntu와 함께 제공되는 잘린 버전의 vim의 : s/^/#경우 세 번째 단계를 대신 입력하십시오 (각 줄의 첫 번째 문자의 나머지 강조 표시는으로 제거 할 수 있음 :nohl).

다음은 시각적 참조를위한 두 개의 작은 화면 녹화입니다.

논평:
논평

주석 해제 :
주석 해제


답변

vim에서 블록을 주석 처리하려면 :

  • Esc(편집 또는 다른 모드를 종료하려면)를 누릅니다.
  • 히트 ctrl+ v(시각적 블록 모드)
  • / 화살표 키를 사용하여 원하는 줄을 선택하십시오 (모든 것을 강조 표시하지는 않습니다-괜찮습니다!)
  • Shift+ i(자본 I)
  • 원하는 텍스트를 삽입하십시오. 예 : %
  • 프레스 EscEsc

vim에서 블록의 주석을 해제하려면 :

  • Esc(편집 또는 다른 모드를 종료하려면)를 누릅니다.
  • 히트 ctrl+ v(시각적 블록 모드)
  • 주석을 해제 할 줄을 선택하려면 / 화살표 키를 사용 하십시오.

    여러 문자를 선택하려면 하나를 사용하거나 다음 방법을 결합하십시오.

    • 더 많은 텍스트를 선택하려면 왼쪽 / 오른쪽 화살표 키를 사용하십시오
    • 텍스트 청크를 선택하려면 shift+ / 화살표 키를 사용하십시오.
    • 일반 삭제 버튼처럼 아래의 삭제 키를 반복해서 누를 수 있습니다.

  • 필요한 경우 d또는 x을 눌러 문자를 반복적으로 삭제하십시오

답변

때로는 플러그인과 .vimrc가 도움이되지 않는 원격 상자에 껍질을 벗기거나 때로는 NerdCommenter가 잘못 가져옵니다 (예 : HTML에 JavaScript가 포함되어 있음).

이러한 경우에는 최첨단 대안이 내장 norm명령으로, 지정된 범위의 각 줄에서 임의의 vim 명령 만 실행합니다. 예를 들면 다음과 같습니다.

댓글로 # :

1. visually select the text rows (using V as usual)
2. :norm i#

이렇게하면 각 줄의 시작 부분에 “#”이 삽입됩니다. 입력하면 범위가 채워 지므로 실제로는:'<,'>norm i#

주석 해제 # :

1. visually select the text as before (or type gv to re-select the previous selection)
2. :norm x

각 줄의 첫 문자가 삭제됩니다. //와 같은 2 자 주석을 사용한 경우 :norm xx두 문자를 모두 삭제하기 만하면 됩니다.

OP의 질문과 같이 주석이 들여 쓰기되면 다음과 같이 삭제를 고정시킬 수 있습니다.

:norm ^x

즉 “공백이 아닌 첫 번째 문자로 이동 한 다음 한 문자를 삭제하십시오”를 의미합니다. 블록 선택과 달리이 기법은 주석이 고르지 않은 경우에도 작동합니다!

참고 : norm문자 그대로 일반 vim 명령을 실행하기 때문에 주석에 국한되지 않고 각 행에 대해 복잡한 편집을 수행 할 수도 있습니다. 명령 시퀀스의 일부로 이스케이프 문자가 필요한 경우 ctrl-v를 입력 한 다음 이스케이프 키를 누르십시오 (또는 더 빠른 매크로를 기록한 다음 norm을 사용하여 각 행에서 해당 매크로를 실행).

참고 2 : 물론 norm많이 사용 하는 경우 매핑을 추가 할 수도 있습니다 . 예를 들어 ~ / .vimrc에 다음 줄을 넣으면 시각적으로 선택한 후 입력 ctrl-n하지 않아도 됩니다.:norm

vnoremap <C-n> :norm

참고 3 : 베어 본 vim에는 때때로 norm컴파일 된 명령 이 없으므로 강화 된 버전 (예 : / bin / vi가 아닌 / usr / bin / vim)을 사용해야합니다.

(이 답변에 통합 된 개선 사항에 대해 @Manbroski 및 @rakslice에게 감사드립니다)


답변

내 안에 다음이 있습니다 .vimrc.

" Commenting blocks of code.
autocmd FileType c,cpp,java,scala let b:comment_leader = '// '
autocmd FileType sh,ruby,python   let b:comment_leader = '# '
autocmd FileType conf,fstab       let b:comment_leader = '# '
autocmd FileType tex              let b:comment_leader = '% '
autocmd FileType mail             let b:comment_leader = '> '
autocmd FileType vim              let b:comment_leader = '" '
noremap <silent> ,cc :<C-B>silent <C-E>s/^/<C-R>=escape(b:comment_leader,'\/')<CR>/<CR>:nohlsearch<CR>
noremap <silent> ,cu :<C-B>silent <C-E>s/^\V<C-R>=escape(b:comment_leader,'\/')<CR>//e<CR>:nohlsearch<CR>

이제 ,cc,cu을 주석으로 처리하고 주석을 해제하기 위해 입력 할 수 있습니다 (일반 모드와 시각적 모드 모두에서 작동).

(몇 년 전 일부 웹 사이트에서 훔쳤으므로 더 이상 어떻게 작동하는지 완전히 설명 할 수 없습니다.). 이 주석 이 설명되어 있습니다.)


답변

vim에서 주석을 달 줄을 지정하십시오.

줄 번호를 공개하십시오 :

:set number

그때

:5,17s/^/#/     this will comment out line 5-17

아니면 이거:

:%s/^/#/        will comment out all lines in file


답변

내가하는 방법은 다음과 같습니다.

  1. 주석을 달고 싶은 첫 번째 줄의 첫 번째 문자로 이동하십시오.

  2. 히트 Ctrl+ qGVIM 또는 Ctrl+ vVIM에서 다음 주석 라인의 첫 번째 문자를 선택 아래로 이동합니다.

  3. 그런 다음을 누르고 c주석 문자를 추가하십시오.

주석 해제는 동일한 방식으로 작동합니다. 주석 문자 대신 공백을 입력하십시오.