Perché non vedo la differenza tra due diversi file in modalità insert in vim?


8

Creiamo due file:

$ echo -n 'test' > test.txt
$ wc test.txt 
0 1 4 test.txt

Il file test.txtnon contiene la nuova riga finale.

$ echo 'test' > test_n.txt
$ wc test_n.txt 
1 1 5 test_n.txt

Il file test_n.txtcontiene la nuova riga finale.

Quanto sopra due file sono ovviamente diversi, ma l'anteprima di entrambi i file in vimin modalità di inserimento non contiene alcuna differenza:

$ vim test.txt

inserisci qui la descrizione dell'immagine

$ vim test_n.txt

inserisci qui la descrizione dell'immagine

Perché non c'è differenza (nuova linea o qualche distinzione speciale)?

E cosa posso fare per aggiungere o rimuovere un personaggio simile vimin modalità inserimento ?


4
": set list" mostrerebbe la differenza, e c'è una modalità che puoi controllare. Entrambi sono nei file della guida.
Thomas Dickey,

Grazie @ThomasDickey Non conoscevo questa opzione prima.
simhumileco,

1
@ThomasDickey se vuoi aggiungere una risposta, sarà probabilmente la risposta accettata. Grazie.
simhumileco

2
@filbranden, per favore, non pubblicare risposte nei commenti. Le risposte nei commenti non possono essere votate dalla community e non contrassegnare la domanda come risposta.
terdon

2
@ThomasDickey vedi sopra. Si prega di pubblicarlo come risposta.
terdon

Risposte:


12

vim ha una modalità "eol" (per fine riga) per dire cosa fare se l'ultima riga nel file manca di un carattere di nuova riga . Puoi vedere tutte le impostazioni della modalità in vim (o qualsiasi programma come vi) di

:set all

POSIX vi non ha una funzione per questo: i file sono di lunghezza zero o hanno una nuova riga finale. Questo perché POSIX vi si occupa solo di file di testo, che per definizione sono linee che terminano con nuove righe. In un rapido controllo, nvi ed elvis non hanno modalità per questo. Nel mio commento, avevo dimenticato un dettaglio di vim: a differenza di vile, un ": set list" non mostra prontamente la newline mancante. Ecco cosa vedo in vim:

ssss$
test$
~
~

mentre in vile:

ssss^J
test
~
~

Per entrambi gli editor, puoi leggere il file, cambiare la modalità , ad es.

:set noeol

e scrivere il file, per ottenere una nuova riga sul file aggiornato. Invece di mostrarlo direttamente, è possibile modificare la riga di stato di VIM per mostrare queste informazioni. Per impostazione predefinita, non sembra farlo, ma alcuni packager lo hanno personalizzato, ad es.

"foo" [noeol] 2L, 9C                                          1,1           All

Uno dei commenti suggerisce di usare il "?" modificatore del setcomando, ad es.

:set eol?

che potrebbe mostrare qualcosa del genere:

noendofline                                                   2,1           All

ma in modalità inserimento, viene sostituito da

-- INSERT --                                                  2,1           All

quindi la riga di stato sembra il posto giusto per conservare queste informazioni.

Le funzionalità ci sono da un po ':

  • La eolfunzionalità è apparsa per la prima volta in vim 2.4 (luglio 1994), secondo un commento nel suo codice sorgente.

  • La newlinemodalità di vile apparve nel luglio 1993 .

( nvi, elvis, vim e vile gestiscono tutti i file binari oltre ai file di testo di POSIX vi ).


2
quasi 20 anni usando vim, e ancora imparo cose nuove al riguardo. e ho ancora paura degli emacs. : D
Tim Kennedy,

1
In vim, puoi anche fare :set eol?per vedere se eol è acceso o spento, quindi non devi guardare attraverso tutto l'output di :set all.
Kevin

Un modo meno confuso di dire "i file sono di lunghezza zero o hanno una nuova riga finale" è "tutte le righe terminano con una nuova riga e un file di testo è una sequenza di zero o più righe".
R .. GitHub smette di aiutare ICE
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.