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?

René Nyffenegger
quelle
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.

edi9999
quelle
6

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

:nnoremap <buffer> <leader> xyz :call SomeFunc(input('Param: '))<CR>
René Nyffenegger
quelle
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.

Bet Lamed
quelle