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.