Perché mai shift shift funziona solo in modalità insert?


13

Ho appena provato a incollare del contenuto (in Git Bash sul server CentOS) in un file usando vim.
Ho appena aperto il file e ho provato a usare shift+ inserte ho notato che la prima metà (approssimativamente) viene tagliata, ma se imposto vim per inserire la modalità e premere shift+ inserttutto viene incollato perfettamente.
Mi stavo chiedendo perché questo è?

Grazie


Ehi, ho anche due pollici !!! : D
RonJohn

Risposte:


24

Sia Shift+ Insertche " incollare " in un terminale si comportano in modo simile: emulano le pressioni dei tasti.

Questa è una distinzione importante che è spesso impossibile per i terminali - stai scrivendo o incollando? Nota : alcuni terminali supportano le modalità di " bracketing paste ", dopo il commento di @ Josh mi sono persino imbattuto in un plug-in vim tra parentesi incolla in xterm che potrebbe interessarti.

I dati incollati andranno persi fino al primo carattere che entra in una modalità di inserimento. Potresti anche scoprire che il cursore si è spostato e che altre parti del file sono cambiate (ad esempio: caso modificato / stato eliminato / ecc.) ...

In breve, se si incolla il testo che si desidera inserire nel file, inserire prima la modalità di inserimento.


Prova a copiare il seguente testo e incollalo in un terminale che esegue Vim (non in modalità inserimento):

hello how are you

Il risultato è lo stesso che digitare le stesse lettere sulla tastiera:

risultato dell'incollare in Vim

In questo caso, ti lascia in modalità inserimento ...

Ora prova a uscire dalla modalità di inserimento - Esc- e incolla quanto segue

/are
n

Questo esegue una ricerca di "are":

risultato dell'incollare in Vim

Ora incolla questo:

:0
dG

Oh no ... tutto è finito!

tutto finito


Scoprirai anche che se hai abilitato il rientro, incollare un blocco di codice in vim (in modalità inserimento) farà rientrare troppo - indenterà automaticamente, e quindi il tuo codice incollato includerà il rientro.

def my_print(message):
    print(message)
    print('done...')

codice di incollaggio

Per risolvere questo problema, utilizzare i comandi :set pastee:set nopaste

codice incolla (modalità incolla)


4
"Questa è una distinzione importante che i terminali non possono fare - stai scrivendo o incollando?" - questo non è del tutto vero, alcuni terminali e applicazioni supportano "paste tra parentesi" in cui viene inviata una sequenza speciale prima e dopo il testo incollato.
Ash

@Josh: interessante, grazie ... il tuo commento mi ha persino portato a un plugin vim
Attie

Sono l'unico infastidito da set nopaste? Mi aspetterei unset paste.
Eric Duminil,

@ThisGuyHasTwoThumbs in alternativa, almeno quando si utilizza Vim, è possibile che si desideri utilizzare il "+registro per interagire con gli Appunti di sistema, poiché tenderà a comportarsi in modo più sano. Il rovescio della medaglia è che alcuni sistemi o build di Vim potrebbero utilizzare "*invece, o semplicemente non avere il supporto degli appunti di sistema, ma nella mia esperienza, "+è stato abbastanza affidabile.
8bittree
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.