1577 Stimmen

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

Ich habe eine Ruby-Code-Datei in vi geöffnet, es gibt Zeilen auskommentiert mit # :

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

Angenommen, ich möchte alle Zeilen in der ersten def ... end Abschnitt. Was ist ein effizienter Weg, das in Vim zu tun?

Im Allgemeinen suche ich nach einer einfachen und flüssigen Möglichkeit, Zeilen zu kommentieren und zu entkommentieren. Hier habe ich es mit Ruby-Code zu tun, aber es könnte auch JavaScript sein ( // ) oder Haml ( -# ).

51 Stimmen

Die akzeptierte Antwort sollte in eine der Antworten geändert werden, die eine detaillierte Anleitung enthält, wie man Blöcke zum Kommentieren und Löschen von Kommentaren ohne die Verwendung eines Plugins erstellen kann. Die aktuell akzeptierte Antwort ist im Grunde nur ein Link zu einem Plugin eines Drittanbieters.

0 Stimmen

Die am besten bewertete Antwort erwähnt keine Plugins, @rationalis Ihr Kommentar ist irreführend, könnten Sie ihn bitte entweder korrigieren oder entfernen, danke.

0 Stimmen

Angemessene Antwort sollte sein Magnus Antwort

159voto

Carlos Punkte 1399

Geben Sie an, welche Zeilen in vim kommentiert werden sollen:

Decken Sie die Zeilennummern auf:

:set number

dann

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

oder dies:

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

13 Stimmen

Da Sie nur das 1. Zeichen jeder Zeile ändern, brauchen Sie das "g" am Ende nicht

1 Stimmen

Einige Vims auf eingebetteten Boxen (wie openwrt) haben keinen visuellen Modus also ist das verdammt genial :)

0 Stimmen

Können Sie erklären, warum :%s/^/#/g werden alle Zeilen auskommentiert ? Ich habe mich gefragt, das Prozentzeichen %

68voto

Flavio Wuensche Punkte 8132

Kommentare umschalten

Wenn Sie nur Folgendes brauchen Kommentare hin- und herschalten Ich würde lieber mit Kommentar.vim von tpope .

enter image description here

Einrichtung

Erreger:

cd ~/.vim/bundle
git clone git://github.com/tpope/vim-commentary.git

vim-plug:

Plug 'tpope/vim-commentary'

Vundle:

Plugin 'tpope/vim-commentary'

Weitere Anpassungen

Fügen Sie dies zu Ihrer .vimrc-Datei hinzu: noremap <leader>/ :Commentary<cr>

Sie können nun Kommentare durch Drücken von Leader + / , genau wie Sublime und Atom.

0 Stimmen

Danke! Wird es irgendwann in der Zukunft die Möglichkeit geben, CSS-Kommentare innerhalb einer HTML-Datei zu verwenden?

0 Stimmen

Aber manchmal möchte man die Server nicht mit Plugins überladen.

0 Stimmen

Für mich war das die beste Lösung. Ich hatte bereits. das Plugin installiert, aber vergessen, die Keybind zu implementieren. Funktioniert jetzt wie ein Zauber!

65voto

Marcin Punkte 11919

Ich mache es folgendermaßen:

  1. Gehen Sie zum ersten Zeichen in der ersten Zeile, die Sie auskommentieren wollen.

  2. Hit Ctrl + q in GVIM oder Ctrl + v in VIM, dann gehen Sie nach unten und wählen Sie das erste Zeichen in den Zeilen aus, die Sie auskommentieren wollen.

  3. Dann drücken Sie c und fügen Sie das Kommentarzeichen hinzu.

Das Aufheben von Kommentaren funktioniert auf die gleiche Weise, nur dass Sie statt des Kommentarzeichens ein Leerzeichen eingeben.

53 Stimmen

c löscht auch das erste Zeichen. Die Antwort von CMS ist richtig, d.h. das Drücken von I dann das/die Kommentarzeichen eintippen und dann Esc (dies ist unter Windows vim)

10 Stimmen

Das funktioniert, nur muss bei Schritt drei "r" gedrückt werden, nicht "c".

0 Stimmen

Alternativ können Sie auch auf ESC zweimal nach Drücken von c und das sollte genügen

49voto

Ich habe mir einen einfachen Zusatz zu meiner .vimrc-Datei ausgedacht, der ziemlich gut funktioniert und leicht erweitert werden kann. Sie fügen einfach einen neuen Dateityp zur comment_map und seinem Kommentarführer hinzu.

Ich habe eine Zuordnung zu den Modi "Normal" und "Visuell" hinzugefügt, aber Sie können die Zuordnung nach Belieben ändern. Ich ziehe es vor, nur eine "Toggle"-Funktion zu haben. Man erträgt es, mehrere Zuordnungen usw. zu haben.

let s:comment_map = { 
    \   "c": '\/\/',
    \   "cpp": '\/\/',
    \   "go": '\/\/',
    \   "java": '\/\/',
    \   "javascript": '\/\/',
    \   "lua": '--',
    \   "scala": '\/\/',
    \   "php": '\/\/',
    \   "python": '#',
    \   "ruby": '#',
    \   "rust": '\/\/',
    \   "sh": '#',
    \   "desktop": '#',
    \   "fstab": '#',
    \   "conf": '#',
    \   "profile": '#',
    \   "bashrc": '#',
    \   "bash_profile": '#',
    \   "mail": '>',
    \   "eml": '>',
    \   "bat": 'REM',
    \   "ahk": ';',
    \   "vim": '"',
    \   "tex": '%',
    \ }

function! ToggleComment()
    if has_key(s:comment_map, &filetype)
        let comment_leader = s:comment_map[&filetype]
        if getline('.') =~ "^\\s*" . comment_leader . " " 
            " Uncomment the line
            execute "silent s/^\\(\\s*\\)" . comment_leader . " /\\1/"
        else 
            if getline('.') =~ "^\\s*" . comment_leader
                " Uncomment the line
                execute "silent s/^\\(\\s*\\)" . comment_leader . "/\\1/"
            else
                " Comment the line
                execute "silent s/^\\(\\s*\\)/\\1" . comment_leader . " /"
            end
        end
    else
        echo "No comment leader found for filetype"
    end
endfunction

nnoremap <leader><Space> :call ToggleComment()<cr>
vnoremap <leader><Space> :call ToggleComment()<cr>

Note :

Ich benutze keine Callbacks oder Hooks in den Dateitypen/Laden, weil ich finde, dass sie den Start von Vim mehr verlangsamen als die .vimrc statische Funktion/Karte tut, aber das ist nur meine Vorliebe. Ich habe auch versucht, es einfach und performant zu halten. Wenn Sie Autocommands verwenden, müssen Sie sicher sein, sie in eine Autocommand-Gruppe zu setzen, sonst werden die Rückrufe mehrmals pro geladener Datei zum Dateityp hinzugefügt und verursachen eine Menge Leistungseinbußen.

1 Stimmen

Ich bin ein absoluter Neuling in Vim. Welche Taste muss ich drücken, um die zugewiesene Funktion umzuschalten? Was ist das <leader><Space> Erklärung am Ende?

2 Stimmen

Sie können <leader> durch einen Schlüssel wie <,> ersetzen. Wenn Sie dann ,SPACE drücken, wird der Kommentarstatus der Zeile umgeschaltet. Anführer ist, was immer Ihr Anführer ist, Vims Standard <Anführer> ist \, aber Sie können Ihren eigenen setzen wie "let mapleader = ','"

0 Stimmen

Gute Antwort, aber ein Ärgernis ist, dass beim Kommentieren von Blöcken, die bereits kommentiert sind, kommentierte mit unkommentierten Zeilen vertauscht werden. QtCreator z.B. entfernt Kommentare nur, wenn alle nicht leeren Zeilen führende Kommentare haben, sonst wird ein führender Kommentar hinzugefügt.

26voto

Arthur Reutenauer Punkte 2584

Verwenden Sie Control-V, um Textrechtecke auszuwählen: Gehen Sie zum ersten # Zeichen, Typ Ctrl + V bewegen Sie sich einmal nach rechts und dann nach unten, bis zum Ende der Kommentare. Jetzt tippen Sie x : Sie löschen alle # Zeichen, gefolgt von einem Leerzeichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X