Jak skomentować blok kodu Pythona w Vimie


186

Zastanawiałem się, czy w Vimie było jakieś mapowanie klawiszy, które pozwoliło mi na wcięcie niektórych linii kodu (czy te linie zostały wybrane w trybie wizualnym, czy n linii powyżej / poniżej aktualnej pozycji kursora).

Więc w zasadzie coś, co przekształca następujące

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

do

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

Jestem w porządku z zastosowaniem jednej #lub """dla zakomentowanie odpowiednie linie. Idealnie, chciałbym również tego samego mapowania klawiszy, aby odkomentować linie, jeśli dane linie zostały skomentowane.


Nie musisz wymyślać koła na nowo, istnieje wtyczka: tComment , która obsługuje (nie) kod komentarza dla wielu języków.
Miau

Odpowiedzi:


411

Krok 1: Przejdź do pierwszej kolumny pierwszego wiersza, który chcesz skomentować.

Stan początkowy

Krok 2: Naciśnij: Ctrl+ vi wybierz linie, które chcesz skomentować:

Wybierz linie

Krok 3: Shift - I#space(Wejdź w tryb wstawiania po lewej, wpisz znaki, aby wstawić. Wybór zniknie, ale wszystkie wiersze w nim zostaną zmodyfikowane po kroku 4.)

Komentarz

Krok 4: Esc

<Esc>


4
Komentowanie linii w ten sposób działa świetnie. Czy jest jakiś sposób, aby odkomentować te linie? Shift-I # <ESC>nie działał (może robię to źle).
Rishabh Manocha

41
@ rishabh-manocha: użyj bloku wizualnego (Ctrl-V), aby zaznaczyć wszystkie dodane # i wpisz x, aby je usunąć.
theosp

3
Musisz pamiętać, że Shift-I oznacza „wstaw przy pierwszym niepustym wierszu”, więc nie można go użyć do usunięcia. Dokonanie wizualnego wyboru za pomocą Ctrl-V oznacza znaki do zmodyfikowania, a następnie „x” usuwa jeden znak z wybranego obszaru, co kończy się usunięciem znaków „#”. Aby uzyskać więcej informacji, zobacz „: h I” i „: h CTRL-V” w vimie.
Tin Man

5
@Samaursa Ctrl-V prawdopodobnie nie działa w systemie Windows. Zamiast tego spróbuj Ctrl-Q.
AZ.

1
Aby usunąć 2 znaki (jeśli wstawiłeś „#”), zlokalizuj kursor w górnym wierszu, który chcesz zmodyfikować, naciśnij ctrl-v, aby przejść do trybu blokowania wizualnego, naciśnij j (lub strzałkę w dół), aby podświetlić wszystkie linie do modyfikacji, naciśnij l (lub strzałka w prawo), aby podświetlić szerokość 2 znaków (naciśnij jeden raz, aby podświetlić kolumnę), a następnie naciśnij d, aby usunąć podświetlony tekst.
myślący


49

Możesz dodać następujące mapowanie do swojego .vimrc

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

Podświetl swój blok za pomocą:

Shift+v

# aby skomentować twoje linie z pierwszej kolumny.

-# odkomentować w ten sam sposób.


5
Proste jest genialne! Dzięki Ci!
I159

1
@architectonic nie działa, chyba że jesteś w trybie wizualnym, a „#” nie jest powiązany
cd

1
Zmodyfikowałem trochę: Ctrl + k dla komentarza „vnoremap <silent> <Ck>: s # ^ # \ ## <cr>: noh <cr>"> Ctrl + u dla komentarza: „vnoremap <silent> <Cu >: s # ^ \ ### <cr>: noh <cr> "
Pradip Das

1
@JonathanHartley nie musisz używać „/” w tym przypadku „#” jest ogranicznikiem. Zatem: s / ^ / # / i: s / ^ # // są równoważnymi podstawieniami. Więc zamień początek linii na „#” i zamień „#” w pierwszej kolumnie na „”. <cr>: noh <cr> po prostu usuwa szukany ciąg, więc nic nie jest podświetlone, gdy skończysz.
cd.

1
@JonathanHartley szczerze myślę, że po prostu podążyłem za wzorem, nie myśląc o tym. Teraz jestem zaskoczony # vs / nie pojawił się wcześniej. Zmieniłem odpowiedź w oparciu o zdrowy rozsądek. Dzięki!
cd.

26

Podświetl swój blok za pomocą: ShiftV

Skomentuj wybrany blok za pomocą: :norm i# (małe litery i)

Aby anulować komentarz, ponownie zaznacz blok i odkomentuj: :norm ^x

:normPolecenie wykonuje czynność dla każdej wybranej linii. Komentowanie wstawi znak #na początku każdej linii, a anulowanie komentarza spowoduje jego usunięcie #.


Z aktualnym Vimem i prostą konfiguracją, wybieranie linii w trybie wizualnym (z Shift+v), a następnie używanie :norm i#tylko zmienia pierwszą wybraną linię. To działa dla mnie, aby komentować wiersze od 389 do 391::389,391norm i #
mmell

22

Zwykle usuwam blok wizualny ( <C-V>), a następnie szukam i zastępuję pierwszy znak:

:'<,'>s/^/#

(Wejście w tryb poleceń z zaznaczonym blokiem wizualnym powoduje automatyczne umieszczenie „<,”> w wierszu poleceń). Następnie mogę anulować komentarz, usuwając ten sam blok wizualny i:

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


9

Mam następujące wiersze w moim .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

Skróty zachowują pozycję kursora i komentarze tak długo, jak się zaczynają #(po # jest spacja). Na przykład:

# variable x
x = 0

Po komentowaniu:

# variable x
#x = 0

Po niewygodnym:

# variable x
x = 0

Fajnie, ale myślę, że lepiej byłoby użyć prostszego s/^/#/wyrażenia regularnego. Wolę, aby znak komentarza pojawiał się na początku wiersza ... ale co ważniejsze, „komentowanie komentarzy” jest naprawdę dość ważne. Odrzuciłbym również au BufEnter *.py, ponieważ #komentarze są na tyle ogólne, że polecenia mogą być domyślnie używane we wszystkich buforach.
travc

5

Szczerze mówiąc używam wtyczki Tcomment dla tego linku . Obsługuje prawie każdą składnię. Definiuje ładne ruchy, używając go z niektórymi dopasowaniami bloków tekstu specyficznymi dla Pythona, czyni go potężnym narzędziem.


5

NERDcommenter to doskonała wtyczka do komentowania, która automatycznie wykrywa wiele typów plików i powiązanych z nimi znaków komentarzy. Śmiesznie łatwy w instalacji za pomocą Pathogen .

Skomentuj za pomocą <leader>cc . Niezomowanie się z <leader>cu. I przełączaj komentarze za pomocą<leader>c<space> .

(Domyślny <leader>klucz w vimie to \)



3

Nie wymaga żadnych wtyczek ani mapowań. Wypróbuj wbudowaną komendę „norm”, która dosłownie wykonuje wszystko, co chcesz w każdej wybranej linii.

Dodaj Komentarze

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

Usuń # komentarze

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

Lub jeśli twoje komentarze są wcięte, możesz to zrobić :norm ^x

Zauważ, że są to zwykłe polecenia vima poprzedzone przez „: norm”, aby wykonać je w każdej linii.

Bardziej szczegółowa odpowiedź na użycie polecenia „norm” w jednej z odpowiedzi tutaj

Jaki jest szybki sposób komentowania / usuwania komentarzy w Vimie?


1

Bardzo minimalna lekka wtyczka : komentarz vim.

gccaby skomentować linię
gcgcdo komentarza. sprawdź stronę wtyczki, aby uzyskać więcej.

v+k/jzaznacz blok, a następnie gccskomentuj ten blok.


0

CtrlK do komentarza (tryb wizualny):

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

CtrlU za odkomentowanie (tryb wizualny):

vnoremap <silent> <C-u> :s#^\###<cr>:noh<cr>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.