Ist es möglich, Zuordnungen mit Parametern zu erstellen?


11

Ich habe ein paar Mappings wie folgt erstellt:

:nnoremap <buffer> <leader>xyzABC   :call SomeFunc('ABC')<CR>
:nnoremap <buffer> <leader>xyzDE    :call SomeFunc('DE')<CR>
:nnoremap <buffer> <leader>xyzFoo18 :call SomeFunc('Foo18')<CR>
:nnoremap <buffer> <leader>xyzBar22 :call SomeFunc('Bar22')<CR>

das funktioniert wie gewünscht.

Ich suche jetzt nach einer Möglichkeit, eine Kartenvorlage zu erstellen, mit der ich die offensichtlich redundanten Teile meiner Zuordnungen entfernen kann

:nnoremap <buffer> <leader> xyz? :call SomeFunc(?)<CR>

damit ich einen beliebigen Wert als Parameter an übergeben kann SomeFunc.

Gibt es eine solche Möglichkeit?


7
Sie können input()oder verwenden getchar(). Es ist jedoch wahrscheinlich normaler, einen Befehl anstelle einer Zuordnung für etwas zu verwenden, das einen Parameter akzeptiert.
Peter Rincker

Ich stimme dem Kommentar von Peter zu. Befehle sind für den Job besser geeignet als Zuordnungen.
Romainl

Antworten:


6

Wie @ peter-rinckler sagte, ist es wahrscheinlich einfacher, dies mit einem Befehl zu tun:

command! -nargs=* Xyz :call SomeFunc(<q-args>)

Ermöglicht dies (im normalen Modus)

:Xyz ABC

Ich mag das nicht wirklich, input()weil man solche Dinge nicht einfach wiederholen kann.


6

Dank des Kommentars von Peter Rincker habe ich die Antwort gefunden:

:nnoremap <buffer> <leader> xyz :call SomeFunc(input('Param: '))<CR>

Hier ist ein weiteres Beispiel : nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . Die Idee ist zu tippen <leader>tn2, um zu Tab 2 zu navigieren.
Jasha

1

Vielleicht möchten Sie einen Blick auf SnipMate werfen , das darauf abzielt, vim TextMate-ähnliche Snippets zu geben. Es hat sich jedenfalls als sehr hilfreich für mich erwiesen.

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.