Come posso aprire un file di sola lettura dalla riga di comando con emacs / vi / vim


79

C'è un modo per dire a emacs / vi / vim (dalla riga di comando) che voglio visualizzare il file in view-modeo read-only.

So come aprire un file come letto solo se emacs / vi / vim è già in esecuzione.


Nota: se non si dispone dell'autorizzazione di scrittura per il file, per impostazione predefinita Vim lo aprirà in modalità di sola lettura. In realtà, penso che sia più facile controllare l'autorizzazione del file piuttosto che fornire un modo di "sola lettura".
Franklin Yu,

Risposte:


45

Per emacs:

emacs FILE --eval '(setq buffer-read-only t)'

Non esiste alcuna opzione di avvio per forzare la sola lettura.

Modifica:
se inserisci questa piccola funzione nello script di avvio della shell (ad esempio .bashrc) puoi aprire un file di sola lettura digitandoev file_to_view

ev() {
  emacs "$1" --eval '(setq buffer-read-only t)'
}

11
Vorrei poter sottovalutare emacs per questo.
Robert Calhoun,

145

vim -R nomefile


4
Funziona benissimo ma ho accettato la risposta di Trey perché preferisco emacs a vim
Nifle

32
E tutti gli utenti di vim si vendicano votando a qualcosa di più della "risposta accettata": D
Xosofox

1
Nota: alcune caselle sembrano avere il comando 'view', forse alias di 'vi -R'.
armyofda12mnkeys il

26

visualizza il nome del file

Fondamentalmente vim in modalità di sola lettura; simples!

Come suggerito dal commento, nel caso in cui viewsia collegato a plain vi, qui ci sono i comandi bash per ispezionare prima la situazione e poi risolverlo:

# non-destructive inspection
which vim
which view
ls -l $(which view)

# overwrite current view with symlink to vim, requires root
ln -sfv $(which vim) $(which view)

1
Nessuna evidenziazione della sintassi però.
Nifle,

7
@Nifle: non ci dovrebbero essere differenze nell'evidenziazione della sintassi. Se il tuo vimha l'evidenziazione della sintassi ma viewnon il tuo , forse sei viewun collegamento a una versione minima vimche non ha l'evidenziazione della sintassi compilata. Confronta gli output del :versioncomando.
garyjohn,

1
Motivo per cui "funziona": Vim leggerà effettivamente argv[0]per decidere il suo comportamento. È un trucco comune; AFAIK a volte GCC e Bash fanno anche questo.
Franklin Yu,

10
vim -R <file>

permette di scrivere con :w!

vim -c ":set nomodifiable"  <file>

Impedisce all'utente di apportare modifiche al file nel buffer. Ma l'utente potrebbe rendere modificabile il buffer con:set modifiable

Puoi usare

vim -c ":noremap q :q<cr>" -c ":map : <Esc>" -c ":set nomodifiable" <file>

per impedire all'utente di disattivare il "nomodificabile" e consentire all'utente di uscire premendo q. Tuttavia, l'utente non può accedere alla modalità di comando, che può essere o meno ciò che desideri.

Puoi anche aprire il file con il comando less:

less <file>

Per visualizzare il file in un ambiente simile a VIM ma senza la possibilità di modificare il file.


+1 per l'utilizzo less, anche se come sottolinea @nxdrvr è possibile premere il tasto v per aprire il file in modalità modificabile invi
Sheharyar

9

Piccolo seguito alla risposta accettata: è possibile alias nella shell per ridurla a un singolo comando. Ad esempio in bash puoi inserire quanto segue nel tuo .bashrc:

emacsro() {
  emacs $1 --eval '(setq buffer-read-only t)'
}

(diverse shell avranno formati diversi per farlo, ma avrai l'idea)

Avrei aggiunto questo come commento in risposta alla risposta accettata, ma non sembrava possibile avere un blocco di "codice" su più righe in un commento e (in bash comunque) il codice sopra riportato deve essere su 3 linee separate.


6

Per visualizzare semplicemente il file senza possibilità di modifica:

cat <file> | less

In lesspuoi andare in "modifica modalità file" premendo il vtasto. Ma non è possibile modificare l'input standard, quindi il piping dell'output su cat <file>less, impedisce lessdi passare alla modalità "modifica" premendo "v".

Per vim lo stesso approccio

cat <file> | vim -

4
Grazie per il vsuggerimento Nifty.
Tshepang,

2
+1, ma non è necessario cat. Basta usare <FILENAME less.
Sparhawk,

@Sparkhawk, <file> lessdarebbe un errore, presumo che tu intendessi less <file>, ma come spiegato nella risposta, quando si utilizza lessdirettamente, l'utente potrebbe premere il tasto v ed entrare in modalità di modifica. Tubazioni catper impedire che lessciò accada.
Sheharyar,

@Sheharyar Intendeva il reindirizzamento dell'output. Forse siete più familiarità con less < FILENAME, che ti dà "Non può edit input standard" quando si preme V . Allo stesso modo con Vim: vim - < FILENAME.
Franklin Yu,

4

Per emacs puoi anche usare la modalità di visualizzazione .

emacsclient --create-frame --eval '(view-file "/tmp/EXAMPLE")'

o alternativa all'interno di un terminale:

emacsclient --nw --eval '(view-file "/tmp/EXAMPLE")'

Oppure puoi usare il mio script wrapper


1

In emacs puoi fare

emacs FILE -f view-mode

L'evidenziazione della sintassi viene applicata. Non si limita ad aprire il file come buffer di sola lettura. Alcuni comandi, come I-search, sono accessibili senza il tasto di controllo in questa modalità.


0

l'invio di un file a STD può essere accettabile, date le dimensioni del file

cat <file>  # dump whole file to stdout
head <file> # view the first few lines
tail <file> # view the last n lines

0

Non disconterò qui la risposta di nessun utente, ma vorrei aggiungere ulteriori informazioni sul Read-only Modefile. Come da documentazione oreilly Modalità di sola lettura Ci saranno momenti in cui si desidera guardare un file ma si desidera proteggere quel file da sequenze di tasti e modifiche involontarie. (È possibile che si desideri chiamare un file lungo per esercitarsi nei movimenti di vi, oppure è possibile scorrere un file di comando o un programma). È possibile inserire un file in modalità di sola lettura e utilizzare tutti i comandi di spostamento vi, ma non sarà possibile modificare il file.

Per guardare un file in modalità di sola lettura, immettere:

$ vi -R file

o:

$ view file

(Il comando view, come il comando vi, può utilizzare una qualsiasi delle opzioni della riga di comando per avanzare in una posizione specifica nel file.) Se si decide di apportare alcune modifiche al file, è possibile ignorare la modalità di sola lettura aggiungendo un punto esclamativo al comando write:

:w!
or:

:wq!

Se hai problemi a scrivere il file.

Per ulteriori riferimenti 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.