Können Sie in Vim datentypspezifische Schlüsselbindungen haben?

79

In meiner .vimrcDatei habe ich eine Schlüsselbindung zum Auskommentieren, die //am Anfang einer Zeile doppelte Schrägstriche ( ) einfügt :

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/\/\//<Esc><Esc>
:map <C-T> :s/\/\/// <Esc><Esc>

Wenn ich jedoch Python-Skripte bearbeite, möchte ich dies in ein # Zeichen für Kommentare ändern

Ich habe eine Python.vimDatei in meinem .vim/ftdetectOrdner, die auch Einstellungen für Registerkartenbreiten usw. enthält. Wie lautet der Code, um die Tastenkombinationen nach Möglichkeit zu überschreiben, damit Python verwendet wird:

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/#/<Esc><Esc>
:map <C-T> :s/#/ <Esc><Esc>
James
quelle

Antworten:

64

Der Ordner ftdetect enthält Skripte zur Erkennung von Dateitypen. Dateityp-Plugins müssen sich im Ordner ftplugin befinden. Der Dateityp muss in einer der folgenden drei Formen im Dateinamen enthalten sein:

  • .../ftplugin/<filetype>.vim
  • .../ftplugin/<filetype>_foo.vim
  • .../ftplugin/<filetype>/foo.vim

Sie können beispielsweise Kommentare für den Dateityp cpp zuordnen, indem Sie Folgendes in Folgendes einfügen .../ftplugin/cpp_mine.vim:

:map <buffer> <C-G> :s/^/\/\//<Esc><Esc>
:map <buffer> <C-T> :s/\/\/// <Esc><Esc>
freitass
quelle
6
Du hast das <buffer>Teil vergessen .
Luc Hermitte
1
Ihre Antwort löst zwei meiner Probleme, Zuordnungen pro Dateityp und wie man die aktuelle Zeile mit einer Zuordnung kommentiert. Toll!
Rendon
83

Sie können :map <buffer> ...eine lokale Zuordnung nur für den aktiven Puffer erstellen. Dies setzt voraus, dass Ihr Vim mit kompiliert wurde +localmap.

Sie können also so etwas tun

autocmd FileType python map <buffer> <C-G> ...
Hammar
quelle
9

Ich bevorzuge es, meine Konfiguration in einer einzigen Datei zu haben, daher verwende ich den autocmd-Ansatz.

augroup pscbindings
  autocmd! pscbindings
  autocmd Filetype purescript nmap <buffer> <silent> K :Ptype<CR>
  autocmd Filetype purescript nmap <buffer> <silent> <leader>pr :Prebuild!<CR>
augroup end

Vim löscht das Festlegen von Autocmds nicht, wenn Sie Ihre Quelle verwenden. Wenn Sie vimrcalso Vim starten, etwas in Ihrem ändern vimrcund :so ~/.vimrcausführen, werden Autocmds zweimal definiert. Deshalb werden die Bindungen gruppiert und mit gelöscht autocmd! group_name. Hier können Sie mehr lesen .

Da Zuordnungen standardmäßig auf jeden Puffer angewendet werden und Sie sie für Puffer ändern möchten, die nur dem Dateityp entsprechen, befindet sich der <buffer>Modifikator darin, wodurch die Zuordnungen auf den lokalen Puffer beschränkt werden.

alextes
quelle
4

Übrigens ... wenn Ihr Hauptproblem das Kommentieren ist ... sollten Sie sich das 'Nerdcommenter'-Plugin ansehen, es ist der schnellste Weg, Ihren Code in Java / C / C ++ / Python / Dos_Batch_Datei / etc usw. zu kommentieren / zu kommentieren.

Tick ​​Tack
quelle
1
Ich war sehr sehr zufrieden mit YAATPP * github.com/tpope/vim-commentary * -> Noch ein erstaunliches Tim Pope Plugin
patrickdavey
0

Ich empfehle den von .../ftplugin/<filetype>.vimfreitass vorgeschlagenen Ansatz, aber in Ihrem speziellen Fall wird Vim Commentary all dies für Sie lösen.

Finlay McAfee
quelle
-1

Dies ist nur ein Teil der Antwort für die Menschen hier mit Schwierigkeiten kommen immer irgendwelche Arbeiten ftplugin Skripte, aber denken Sie daran , dass Ihre .vimrc (oder eine Datei , die es Quellen) enthalten sollte

filetype plugin on

oder

:filetype plugin on

Damit Dateityp-Plugins ausgeführt werden, wenn eine Datei eines bestimmten Typs geladen wird.

Koyae
quelle
Habe gerade ein paar Downvotes bemerkt.
Gerne