Vim에서 파이썬 코드 블록을 주석 처리하는 방법


186

특정 들여 (그 라인 비주얼 모드로 선택되었는지, 또는 코드 라인을 나를 수 있도록 빔에있는 키 맵핑면 해서요 N 현재 커서 위치의 위 / 아래에 라인).

기본적으로 다음을 변환하는 것

def my_fun(x, y):
    return x + y

#def my_fun(x, y):
#    return x + y

관련 줄을 주석 처리 #하거나 """주석을 달아도 괜찮습니다 . 주어진 라인이 주석 처리 된 경우 동일한 키 매핑을 사용하여 라인의 주석 처리를 제거하는 것이 이상적입니다.


휠을 재발 명할 필요가 없으며 플러그인이 있습니다 : tComment for you, 여러 언어의 주석 코드를 지원합니다.
Meow

답변:


411

1 단계 : 주석을 달려는 첫 번째 행의 첫 번째 열로 이동하십시오.

초기 상태

2 단계 : Ctrl+ v를 누르고 주석을 달 줄을 선택합니다.

선을 선택하십시오

3 단계 : Shift - I#space(. 삽입-에서 왼쪽 모드를 입력 문자 삽입 입력 선택은 사라지지만 그 안에 모든 라인은 4 단계 이후에 수정됩니다)

논평

4 단계 : Esc

<Esc>


4
이 방법으로 줄을 주석 처리하면 효과적입니다. 이 줄을 주석 해제하는 방법이 있습니까? Shift-I # <ESC>작동하지 않았습니다 (아마 내가 잘못하고있는 것 같습니다).
Rishabh Manocha

41
@ rishabh-manocha : 비주얼 블록 (Ctrl-V)을 사용하여 추가 된 모든 #을 선택하고 x를 입력하여 삭제하십시오.
theosp

3
Shift-I는 "줄의 첫 번째 비 공백에 삽입"을 의미하므로 삭제하는 데 사용할 수 없습니다. Ctrl-V를 사용하여 시각적으로 선택하면 수정할 문자가 표시되고 "x"는 선택한 영역에서 한 문자를 삭제하여 '#'문자를 삭제합니다. 자세한 내용은 vim의 ": h I"및 ": h CTRL-V"를 참조하십시오.
Tin Man

5
@Samaursa Ctrl-V가 Windows에서 작동하지 않을 수 있습니다. 대신 Ctrl-Q를 사용해보십시오.
AZ.

1
2 개의 문자를 삭제하려면 ( '#'을 삽입 한 경우) 수정하려는 맨 위 줄에서 커서를 찾고 ctrl-v를 눌러 시각적 블록 모드로 들어가고 j (또는 아래쪽 화살표)를 눌러 수정할 모든 줄을 강조 표시 한 다음 l (또는 오른쪽 화살표)를 사용하여 2 자 너비를 강조 표시 한 다음 (열당 한 번 눌러 강조 표시) d를 눌러 강조 표시된 텍스트를 삭제하십시오.
thinkmassive


49

.vimrc에 다음 매핑을 추가 할 수 있습니다

vnoremap <silent> # :s/^/#/<cr>:noh<cr>
vnoremap <silent> -# :s/^#//<cr>:noh<cr>

다음을 사용하여 블록을 강조 표시하십시오.

Shift+v

# 첫 번째 열에서 줄을 주석으로 처리하십시오.

-# 같은 방식으로 주석을 제거합니다.


5
단순하다! 감사합니다!
I159

1
@architectonic 비주얼 모드에 있지 않으면 효과가 없으며 '#'는 비주얼 모드에서 바인딩되지 않습니다. vimdoc.sourceforge.net/htmldoc/visual.html#visual-operators

1
주석을 수정하려면 Ctrl + k : "vnoremap <silent> <Ck> : s # ^ # \ ## <cr> : noh <cr>"> 주석 해제를위한 Ctrl + u : "vnoremap <silent> <Cu > : s # ^ \ ### <cr> : noh <cr> "
Pradip Das

1
@JonathanHartley이 경우 '/'를 사용할 필요가 없습니다. '#'은 구분 기호입니다. 따라서 : s / ^ / # / 및 : s / ^ # //는 동등한 대체 항목입니다. 따라서 줄의 시작을 '#'로 바꾸고 첫 번째 열의 '#'을 ''로 바꿉니다. <cr> : noh <cr>은 검색 문자열을 지우기 때문에 아무 것도 강조 표시되지 않습니다.
16:06에 작성

1
@JonathanHartley 솔직히 방금 생각하지 않고 패턴을 따랐습니다. 이제 # vs /가 더 빨리 나오지 않았다는 것에 놀랐습니다. 상식에 따라 답변을 변경했습니다. 감사!
20:30에

26

다음을 사용하여 블록을 강조 표시하십시오. ShiftV

선택한 블록을 다음과 같이 주석 처리하십시오 :norm i#(소문자 i).

주석을 해제하려면 블록을 다시 강조 표시하고 다음과 같이 주석을 해제하십시오. :norm ^x

:norm명령은 선택한 모든 줄에 대해 작업을 수행합니다. 주석 처리하면 #모든 줄의 시작 부분에 a가 삽입 되고 주석 처리를 제거하면 해당 행이 삭제 #됩니다.


최신 Vim 및 일반 구성 Shift+v을 사용 :norm i#하면 시각 모드에서 ( )를 사용하여 선을 선택한 다음를 사용 하여 첫 번째로 선택한 선만 변경합니다. 이것은 389 ~ 391 행을 주석 처리하는 데 효과적입니다.:389,391norm i #
mmell

22

나는 일반적으로 시각적 블록 ( <C-V>)을 쓸어 내고 첫 번째 문자를 검색하고 바꿉니다.

:'<,'>s/^/#

(시각 블록이 선택된 상태에서 명령 모드를 시작하면 명령 줄에 '<,'>이 자동으로 배치됩니다) 그런 다음 동일한 시각적 블록을 스윕하여 블록의 주석을 해제 할 수 있습니다.

:'<,'>s/^#//


9

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

" comment line, selection with Ctrl-N,Ctrl-N
au BufEnter *.py nnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N><C-N>    <C-O>mn<C-O>:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>gv`n

" uncomment line, selection with Ctrl-N,N
au BufEnter *.py nnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>:s/^#$//ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N>n     <C-O>mn<C-O>:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR><C-O>:s/^#$//ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>gv:s/#\n/\r/ge<CR>:noh<CR>gv`n

바로 가기는 커서 위치와 주석이 시작되는 동안 #(# 뒤에 공백이 있음) 보존합니다 . 예를 들면 다음과 같습니다.

# variable x
x = 0

논평 후 :

# variable x
#x = 0

언 커맨트 후 :

# variable x
x = 0

좋습니다 s/^/#/. 하지만 더 간단한 정규 표현식을 사용하는 것이 좋습니다 . 나는 주석 문자가 줄의 시작 부분에 나타나는 것을 선호하지만 훨씬 더 중요한 것은 '댓글 주석'이 실제로 중요합니다. 나는 또한 드롭 것 au BufEnter *.py때문에 #의견이 명령은 기본적으로 모든 버퍼에 사용되는 일반적인 충분합니다.
travc

5

솔직히 그 링크에 tcomment 플러그인을 사용합니다 . 거의 모든 구문을 처리 할 수 ​​있습니다. 파이썬에 특화된 텍스트 블록 매처와 함께 멋진 움직임을 정의하여 강력한 도구입니다.


5

NERDcommenter 는 여러 파일 형식과 관련 주석 문자를 자동으로 감지하는 주석 작성을위한 훌륭한 플러그인입니다. Pathogen 을 사용하여 엄청나게 쉽게 설치할 수 있습니다.

와 코멘트 <leader>cc. 의 주석 처리를 제거하십시오 <leader>cu. 로 의견을 전환합니다 <leader>c<space>.

( <leader>vim 의 기본 키는 \)


3

vim을위한 많은 주석 플러그인이 있습니다. 그중 다수는 파이썬뿐만 아니라 다국어입니다. Vundle 과 같은 플러그인 관리자를 사용하는 경우 다음을 사용하여 Vundle 을 설치 한 후 검색 할 수 있습니다.

:PluginSearch comment

그리고 당신은 결과의 창을 얻을 것입니다. 또는 vim-scripts에서 주석 플러그인을 검색 할 수도 있습니다 .


3

플러그인이나 매핑이 필요하지 않습니다. 내장 된 "norm"명령을 사용하면 선택한 모든 행에서 원하는 것을 그대로 실행할 수 있습니다.

댓글 # 개 추가

1. shift V to visually select lines
2. :norm i#

댓글 # 개 제거

1. visually select region as before
2. :norm x

또는 귀하의 의견이 들여 쓰기되면 할 수 있습니다 :norm ^x

각 행에서 명령을 실행하기 위해 ": norm"이 앞에 오는 일반적인 vim 명령 일뿐입니다.

다음 답변 중 하나에서 "norm"명령 사용에 대한 자세한 답변

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


1

아주 작은 경량 플러그인 : vim-commentary.

gcc
gcgc주석을 해제 할 줄 을 주석으로 지정합니다. 자세한 내용은 플러그인 페이지를 확인하십시오.

v+k/j블록을 강조 표시 한 다음 gcc해당 블록을 주석 처리하십시오.


0

CtrlK 의견 (비주얼 모드) :

vnoremap <silent> <C-k> :s#^#\##<cr>:noh<cr>

CtrlU 주석 해제 (비주얼 모드) :

vnoremap <silent> <C-u> :s#^\###<cr>:noh<cr>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.