[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모든 #
문자가 세로로 삭제됩니다 .
텍스트 블록을 주석 처리하는 것은 거의 동일합니다.
- 먼저 주석을 달고 싶은 첫 번째 줄로 이동하여을 누릅니다 CtrlV. 에디터가
VISUAL BLOCK
모드 에 놓 입니다. - 그런 다음 화살표 키를 사용하여 마지막 줄까지 선택하십시오.
- 이제을 누르면 ShiftI편집기가
INSERT
모드로 전환되고을 누릅니다 #. 첫 번째 줄에 해시가 추가됩니다. - 그런 다음 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
답변
내가하는 방법은 다음과 같습니다.
-
주석을 달고 싶은 첫 번째 줄의 첫 번째 문자로 이동하십시오.
-
히트 Ctrl+ qGVIM 또는 Ctrl+ vVIM에서 다음 주석 라인의 첫 번째 문자를 선택 아래로 이동합니다.
-
그런 다음을 누르고 c주석 문자를 추가하십시오.
주석 해제는 동일한 방식으로 작동합니다. 주석 문자 대신 공백을 입력하십시오.