Annulla incolla in vim


2

So di ue Ctrl-rper annullare e ripetere. Ma umi riporta all'ultimo stato salvato. Voglio sapere come annullare una pasta cmd-v.

Per esempio,

I am typing here bla bla bla, [link to website](here I paste a wrong http link 
with cmd-v)

Quindi voglio tornare a,

I am typing here bla bla bla, [link to website](

C'è un modo per farlo in vim?

Grazie in anticipo.

Risposte:


1

Dichiarazione di non responsabilità: sono del tutto ignaro di come le tastiere Apple con cmd piuttosto che ctrl interagiscono con vim, quindi potrebbe essere necessario modificare o perfezionare alcune di queste.

Il modo corretto per incollare in vim è usare il pcomando. Per incollare dagli Appunti di sistema, dovrai usare "*p. Quindi, il modo standard di fare le cose sarebbe quello di lasciare la modalità di inserimento e "*pa( aovviamente, rientra nella modalità di inserimento).

Se vuoi avere una scorciatoia da tastiera da utilizzare nella modalità di inserimento, sembrerebbe naturale fare qualcosa del tipo:

inoremap <c-v> <esc>"*pa

(Cioè: in realtà digita ciò che c'è invece di premere ctrl + v e scappa).

A prima vista sembra che questo dovrebbe fornire il comportamento desiderato: sta semplicemente automatizzando il processo di incollaggio standard che ho descritto sopra. Ma non lo fa. Vim tratta tutte le parti di un comando come parte dello stesso blocco di annullamento e vim stessa modalità di inserimento è una sorta di comando.

Tuttavia, puoi avviare manualmente un nuovo blocco di annullamento mentre sei in modalità di inserimento usando ctrl + g seguito da u(sì, lo so, questo accordo di tasti sembra abbastanza inimmaginabile, ma il gioco è fatto). Quindi, puoi modificare la rimappatura dei tasti in questo modo:

inoremap <c-v> <c-g>u<esc>"*pa

Tutto questo funzionerà con ctrl + v (l'ho appena testato su Windows e funziona almeno lì), potrebbe essere necessario utilizzare qualcosa di diverso (diverso da <c-v>) per le scorciatoie basate su cmd all'interno di vim. Se stai usando una tastiera Apple, ciò implica OSX - se cmd + v è una scorciatoia di sistema, non sono sicuro di cosa avrebbe la priorità. Alcuni googling superficiali suggeriscono che potrebbe essere necessario giocherellare con una configurazione a livello di sistema operativo per far funzionare correttamente cmd con vim.


0

In MacVim, devi annullare la mappatura della Edit > Pastevoce di menu per sovrascrivere il collegamento, quindi puoi rimappare Cmd-V ( D-vin linguaggio MacVim) al comando appropriato in ciascuna modalità. Ho aggiunto questo al mio ~/.gvimrce ora tutto funziona meravigliosamente:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

L' <C-g>uè necessario solo in modalità di inserimento per fissare la cronologia degli annullamenti; la noremape cnoremapsono semplicemente per ripristinare il comportamento di pasta di default in modalità normale e di comando.

Grazie a evilsoup per avermi indicato la giusta direzione qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.