So kommentieren Sie einen Python-Codeblock in Vim aus


186

Ich habe mich gefragt, ob es in Vim eine Tastenbelegung gibt, mit der ich bestimmte Codezeilen einrücken kann (ob diese Zeilen im visuellen Modus ausgewählt wurden oder n Zeilen über / unter der aktuellen Cursorposition).

Also im Grunde etwas, das Folgendes umwandelt

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

zu

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

Ich bin damit einverstanden, entweder #oder """zum Auskommentieren der relevanten Zeilen zu verwenden. Idealerweise möchte ich auch, dass das gleiche Keymapping die Zeilen auskommentiert, wenn die angegebenen Zeilen auskommentiert wurden.


Sie müssen das Rad nicht neu erfinden, es gibt ein Plugin: tComment für Sie, das (un) Kommentarcode für mehrere Sprachen unterstützt.
Miau

Antworten:


410

Schritt 1: Gehen Sie zur ersten Spalte der ersten Zeile, die Sie kommentieren möchten.

Ausgangszustand

Schritt 2: Drücken Sie: Ctrl+ vund wählen Sie die Zeilen aus, die Sie kommentieren möchten:

Linien auswählen

Schritt 3: Shift - I#space(Rufen Sie den Einfügemodus links auf und geben Sie die einzufügenden Zeichen ein. Die Auswahl wird ausgeblendet, aber alle darin enthaltenen Zeilen werden nach Schritt 4 geändert.)

Kommentar

Schritt 4: Esc

<Esc>


4
Das Kommentieren der Zeilen auf diese Weise funktioniert hervorragend. Gibt es eine Möglichkeit, diese Zeilen zu kommentieren? Shift-I # <ESC>hat nicht funktioniert (vielleicht mache ich es falsch).
Rishabh Manocha

41
@ rishabh-manocha: Verwenden Sie den visuellen Block (Strg-V), um alle hinzugefügten # auszuwählen, und geben Sie x ein, um sie zu löschen.
Theosp

3
Sie müssen sich daran erinnern, dass Shift-I "beim ersten Nicht-Leerzeichen in der Zeile einfügen" bedeutet, sodass es nicht zum Löschen verwendet werden kann. Wenn Sie mit Strg-V eine visuelle Auswahl treffen, werden die zu ändernden Zeichen markiert. Mit "x" wird ein Zeichen im ausgewählten Bereich gelöscht, und am Ende werden die Zeichen "#" gelöscht. Weitere Informationen finden Sie unter ": h I" und ": h CTRL-V" in vim.
der Blechmann

5
@ Samasursa Strg-V funktioniert wahrscheinlich nicht unter Windows. Versuchen Sie stattdessen Strg-Q.
AZ.

1
Um 2 Zeichen zu löschen (wenn Sie '#' eingefügt haben), suchen Sie den Cursor in der obersten Zeile, die Sie ändern möchten. Drücken Sie Strg-V, um den visuellen Blockmodus aufzurufen. Drücken Sie j (oder den Abwärtspfeil), um alle zu ändernden Zeilen hervorzuheben. Drücken Sie l (oder Pfeil nach rechts), um eine Breite von 2 Zeichen hervorzuheben (drücken Sie einmal pro Spalte, um sie hervorzuheben), und drücken Sie dann d, um den markierten Text zu löschen.
Thinkmassive


49

Sie können Ihrer .vimrc die folgende Zuordnung hinzufügen

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

Markieren Sie Ihren Block mit:

Shift+v

# um Ihre Zeilen aus der ersten Spalte zu kommentieren.

-# auf die gleiche Weise zu kommentieren.


5
Einfach ist genial! Danke!
I159

1
@architectonic hat keine Auswirkung, es sei denn, Sie befinden sich im visuellen Modus, und '#' ist im visuellen Modus ungebunden. vimdoc.sourceforge.net/htmldoc/visual.html#visual-operators
aktualisiert

1
Ich habe ein wenig geändert: Strg + k für Kommentar "vnoremap <silent> <Ck>: s # ^ # \ ## <cr>: noh <cr>"> Strg + u für Kommentar: "vnoremap <silent> <Cu >: s # ^ \ ### <cr>: noh <cr> "
Pradip Das

1
@JonathanHartley Sie müssen nicht '/' verwenden, in diesem Fall ist '#' das Trennzeichen. Also: s / ^ / # / und: s / ^ # // sind die äquivalenten Substitutionen. Ersetzen Sie also den Zeilenanfang durch '#' und '#' in der ersten Spalte durch ''. <cr>: noh <cr> löscht nur die Suchzeichenfolge, sodass nach Abschluss nichts mehr hervorgehoben wird.
Uhr aktualisiert

1
@ JonathanHartley Ehrlich gesagt denke ich, ich bin einfach einem Muster gefolgt, ohne darüber nachzudenken. Jetzt bin ich überrascht, dass # vs / nicht früher aufgetaucht ist. Die Antwort wurde aufgrund des gesunden Menschenverstandes geändert. Vielen Dank!
Datum

26

Markieren Sie Ihren Block mit: ShiftV

Kommentieren Sie den ausgewählten Block mit: :norm i#(Kleinbuchstabe i)

Um den Kommentar zu entfernen, markieren Sie Ihren Block erneut und kommentieren Sie Folgendes aus: :norm ^x

Der :normBefehl führt für jede ausgewählte Zeile eine Aktion aus. Beim Kommentieren wird #am Anfang jeder Zeile ein eingefügt, beim Kommentieren wird dies gelöscht #.


Mit einem aktuellen Vim und einer einfachen Konfiguration ändert das Auswählen von Zeilen im visuellen Modus (mit Shift+v) und die anschließende Verwendung :norm i#nur die erste ausgewählte Zeile. Dies funktioniert für mich, um die Zeilen 389 bis 391 zu kommentieren::389,391norm i #
mmell

22

Normalerweise fege ich einen visuellen Block ( <C-V>) aus, suche und ersetze das erste Zeichen durch:

:'<,'>s/^/#

(Wenn Sie den Befehlsmodus mit einem ausgewählten visuellen Block aufrufen, wird '<,'> automatisch in die Befehlszeile eingefügt.) Ich kann den Block dann auskommentieren, indem ich denselben visuellen Block auswische und:

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


9

Ich habe die folgenden Zeilen in meinem .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

Die Verknüpfungen behalten Ihre Cursorposition und Ihre Kommentare bei, solange sie beginnen #(nach # steht ein Leerzeichen). Beispielsweise:

# variable x
x = 0

Nach dem Kommentieren:

# variable x
#x = 0

Nach dem Auftakt:

# variable x
x = 0

Schön, aber ich denke, Sie sind besser dran, wenn Sie den einfacheren s/^/#/regulären Ausdruck verwenden. Ich bevorzuge, dass das Kommentarzeichen am Anfang der Zeile steht ... aber viel wichtiger ist, dass das Kommentieren von Kommentaren wirklich ziemlich wichtig ist. Ich würde auch das löschen au BufEnter *.py, da #Kommentare allgemein genug sind, damit die Befehle standardmäßig in allen Puffern verwendet werden.
Travc

5

Ehrlich gesagt benutze ich ein Tcomment Plugin für diesen Link . Es kann fast jede Syntax verarbeiten. Es definiert nette Bewegungen und macht es mit einigen für Python spezifischen Textblock-Matchern zu einem leistungsstarken Werkzeug.


5

NERDcommenter ist ein hervorragendes Plugin zum Kommentieren, das automatisch eine Reihe von Dateitypen und die zugehörigen Kommentarzeichen erkennt. Lächerlich einfach mit Pathogen zu installieren .

Kommentar mit <leader>cc. Kommentar mit <leader>cu. Und Kommentare umschalten mit <leader>c<space>.

(Der Standardschlüssel <leader>in vim ist \)


3

Es gibt viele Kommentar-Plugins für vim - von denen einige mehrsprachig sind - nicht nur Python. Wenn Sie einen Plugin-Manager wie Vundle verwenden , können Sie nach diesen suchen (sobald Sie Vundle installiert haben), indem Sie z.

:PluginSearch comment

Und Sie erhalten ein Fenster mit Ergebnissen. Alternativ können Sie auch vim-Skripte nach Kommentar-Plugins durchsuchen .


3

Keine Plugins oder Mappings erforderlich. Probieren Sie den integrierten Befehl "norm" aus, der buchstäblich alles ausführt, was Sie in jeder ausgewählten Zeile wollen.

Füge Kommentare hinzu

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

# Kommentare entfernen

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

Oder wenn Ihre Kommentare eingerückt sind, können Sie dies tun :norm ^x

Beachten Sie, dass dies nur gewöhnliche vim-Befehle sind, denen ": norm" vorangestellt ist, um sie in jeder Zeile auszuführen.

Detailliertere Antwort für die Verwendung des Befehls "norm" in einer der Antworten hier

Was ist ein schneller Weg, um Zeilen in Vim zu kommentieren / zu kommentieren?


1

Ein sehr minimales, leichtes Plugin : vim-comment.

gcceine Zeile
gcgczu kommentieren, um zu kommentieren . Weitere Informationen finden Sie auf der Plugin-Seite.

v+k/jMarkieren Sie dann den Block, gccum diesen Block zu kommentieren.


0

CtrlK für einen Kommentar (visueller Modus):

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

CtrlU zum Kommentieren (visueller Modus):

vnoremap <silent> <C-u> :s#^\###<cr>:noh<cr>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.