2013-12-11 7 views
6

Can Vim può applicare automaticamente i comandi di modifica/inserimento come dd, O e u a tutte le finestre aperte? Sto componendo un documento LaTeX in una finestra e vorrei usare una seconda finestra per le note a margine, TODOs, ecc. (Simile a Cornell notes). La mia scheda Vim sembraApplicazione automatica dei comandi di modifica in più finestre in Vim

|1 \documentclass{article}  |1 
|2 \begin{document}    |2 
|3 Lorem ipsum dolor sit amet, |3 TODO: reword this. 
| …consectetur adipisicing elit.| 
|4 Ut enim ad minim veniam, quis |4 Could use some more examples. 
| …nostrud exercitation ullamco.| 
|5        |5 Put bibliography here. 
|6 \end{document}    |6 

Ho bisogno di mantenere wrap (e preferibilmente showbreak) attivati ​​come le mie frasi sono spesso abbastanza lungo.

Finora utilizzo correttamente scrollbind e cursorbind per spostarsi in parallelo tra i due file. Quando inserisco o elimina righe in un file, però, l'allineamento si interrompe. Ad esempio, potrei inserire una riga (mediante o) nella finestra a sinistra per caricare un pacchetto, producendo

|1 \documentclass{article}  |1 
|2 \usepackage{hyperref}   |2 
|3 \begin{document}    |3 TODO: reword this. 
|4 Lorem ipsum dolor sit amet, |4 Could use some more examples. 
| …consectetur adipisicing elit.| 
|5 Ut enim ad minim veniam, quis |5 Put bibliography here. 
| …nostrud exercitation ullamco.| 
|6        |6 
|7 \end{document}    |~ 

Ora tutti i commenti nella finestra di destra sono sulle linee sbagliate. Se la mia modifica nella finestra di sinistra ha anche inserito una nuova riga dopo la riga 1 nella finestra di destra, l'allineamento sarebbe stato mantenuto. Ho avuto un certo successo usando il comando windo (ad esempio windo normal dd per eliminare una riga in entrambi i file); dovrei mappare dd a window normal dd e in modo simile per ogni comando che potrei usare? Come funziona questo per comandi come o che ti lasciano in modalità inserimento?

Per complicare il problema, mi piacerebbe idealmente qualsiasi azione che ha creato o eliminato un carattere di nuova riga da replicare in entrambi i file. Ad esempio, i ritorni a capo in modalità inserimento dovrebbero essere catturati e ripetuti nell'altra finestra.

C'è un modo migliore per farlo (mi attaccherò a Vim ma sarei interessato a conoscere altri editor che hanno questa funzionalità), o dovrei semplicemente mantenere i miei commenti all'interno del file del documento?

+2

Non è una risposta, ma non è questo il motivo per cui i commenti di% sono? Basta mettere le linee a destra direttamente nel documento a cui appartengono. Puoi ancora eliminarli facilmente se devi, ': g/^ \ s *%/d'. – glts

risposta

2

All'interno di Vim, non sarà possibile implementare un sistema perfetto completo e coerente al 100%.

Mentre comandi come dd possono essere applicati direttamente all'altro buffer, la modalità di inserimento richiede già l'attesa per la fine dell'inserimento di testo. Un comando come u non può essere applicato direttamente; è necessario controllare ciò che è cambiato e applicarlo all'altro buffer. Lo stesso vale per la maggior parte dei comandi Ex come :global, :substitute.

Invece di ricodificare la maggior parte dei comandi, preferisco definire :autocmd s su eventi come CursorHold,InsertLeave, che confrontano il numero totale di righe con il valore memorizzato in precedenza e quindi adattano l'altro buffer alla riga corrente di conseguenza. Se sei disposto ad accettare che certe modifiche cadano in questo schema e tu le eviti o le correggi manualmente, questa può essere una soluzione praticabile.

3

Nizza, non ho mai sentito parlare del Cornell notes ma dubito che sia possibile sincronizzare due buffer nel modo desiderato senza hickups (mi piacerebbe essere smentiti però).

Ma cosa succede se facciamo un passo indietro e invece di provare a sincronizzare due buffer proviamo a usare un solo buffer creando una grondaia nella colonna 120?

Workflow

  • Creare un nuovo documento
  • :set virtualedit=all
  • In modalità normale, tipo [email protected]='120|i|^M^[' per creare una grondaia in posizione 120 oltre 80 linee.
  • Scrivere il documento e le note
  • Salvare il documento

^M viene inserito come ctrl-vimmettere
^[è inserito come ctrl-vesc

Vantaggi

  • Navigare ed eliminare il documento e note è semplificata. Dopotutto, stai lavorando solo in un buffer.
  • Dovrai solo aprire un file per avere sia documenti che note.
  • Se passi la maggior parte del tempo a navigare e modificare un documento esistente, questa potrebbe essere una soluzione valida.

Svantaggi

  • Scrivendo le note sarà più complicato perché dovrete usare R(sostituire) un sacco invece di i(inserto) di non rovinare il grondaia che abbiamo creato.
  • Ridimensionare due buffer è più semplice di "ridimensionare" la grondaia fissa.
  • Se passi la maggior parte del tempo a creare nuovi documenti, beh, sarà doloroso.
+0

@glts - sì, sì, grazie. –