2013-01-17 14 views
13

Mi chiedo se sia possibile in Vim creare una mappatura (per la modalità normale) che consenta l'input dell'utente prima dell'esecuzione della mappatura.Mappatura Vim con input utente

Voglio creare una mappatura per una scorciatoia per il mio comando grep più usato. Voglio che il comando permetta di inserire ciò che sto cercando e poi eseguirlo su invio.

Questa è una sorta di ciò che voglio:

nmap F :grep! "*user input*"<CR>:cw<CR> 

Non riesco a capire come mettere in pausa e prendere l'input dell'utente. Sto forse pensando a questo nel modo giusto? Ci sono modi migliori per fare ciò che sto cercando?

risposta

7

Un'alternativa sarebbe creare un comando personalizzato e utilizzare una mappatura per chiamare il nuovo comando.

command! -nargs=+ -complete=file -bar Grep grep! <args>|cw 

Ora è possibile creare il mapping:

nnoremap <f2> :Grep<space> 

Probabilmente anche voler stare lontano dalla mappatura della chiave F come una mappatura piuttosto comodo.

Per maggiori spiegazioni, vedi:

:h :command 
+0

Buona risposta. Lo mapperei come 'nnoremap : Grep ' in modo che sia più facile sapere che lo spazio è lì nel tuo vimrc. –

+0

Buona presa. Ho aggiornato la mia risposta. –

11

c'è una funzione input(prompt [, text [, completion]]):

Il risultato è una stringa, che è tutto ciò che l'utente ha digitato sulla linea di comando . L'argomento {prompt} è una stringa prompt o una stringa vuota (per nessun prompt). È possibile utilizzare un '\ n' nel prompt per avviare una nuova riga.

(dal :help input()).

Per cose come :grep!, probabilmente dovrete compilare il comando usando un'espressione stringa e quindi :execute esso.

+1

Mi può indicare un esempio di ciò che si intende per "costruire il comando utilizzando un'espressione stringa"? Grazie! – gylaz

+2

Qualcosa come ": exec": grep! ".input (" grep what? Where? ")' –

Problemi correlati