Wie kann ich eine schreibgeschützte Datei über die Befehlszeile mit emacs / vi / vim öffnen?

79

Gibt es eine Möglichkeit Emacs / vi / vim zu erzählen (von der Kommandozeile) , dass ich die Datei in anzeigen möchte view-modeoder read-only.

Ich kann eine Datei als schreibgeschützt öffnen, wenn emacs / vi / vim bereits ausgeführt wird.

Nifle
quelle
Hinweis: Wenn Sie keine Schreibberechtigung für die Datei haben, wird sie von Vim standardmäßig im schreibgeschützten Modus geöffnet. Eigentlich denke ich, dass es einfacher ist, die Dateiberechtigung zu kontrollieren, als eine "Nur-Lese" -Methode bereitzustellen.
Franklin Yu

Antworten:

45

Für Emacs:

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

Es gibt keine Startoption, die schreibgeschützt ist.

Bearbeiten:
Wenn Sie diese kleine Funktion in Ihr Shell-Startskript einfügen (z. B. .bashrc), können Sie eine schreibgeschützte Datei öffnen, indem Sie Folgendes eingebenev file_to_view

ev() {
  emacs "$1" --eval '(setq buffer-read-only t)'
}
Trey Jackson
quelle
11
Ich wünschte, ich könnte Emacs dafür ablehnen.
Robert Calhoun
145

vim -R Dateiname

RedGrittyBrick
quelle
4
Funktioniert hervorragend, aber ich habe
Treys
32
Und alle vim Benutzer nehmen Rache , indem sie mehr als die „akzeptierte Antwort“ upvoting: D
Xosofox
1
Hinweis: Einige Boxen scheinen den Befehl 'view' zu haben, möglicherweise Aliase zu 'vi -R'.
Armyofda12mnkeys
26

Dateiname anzeigen

Grundsätzlich vim im Nur-Lese-Modus; Simples!

Wie durch Kommentar angedeutet, im Fall viewzu Ebene verbunden ist vi, sind hier bash Befehle zum ersten Situation zu prüfen und dann zu beheben:

# 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)
mrverrall
quelle
1
Keine Syntaxhervorhebung.
Nifle
7
@Nifle: Es sollte keinen Unterschied in der Syntaxhervorhebung geben. Wenn Ihre vimSyntax-Hervorhebung aktiviert ist, Ihre viewjedoch nicht, ist Ihre möglicherweise viewein Link zu einer Minimalversion vim, in der keine Syntax-Hervorhebung kompiliert ist. Vergleichen Sie die Ausgaben des :versionBefehls.
Garyjohn
1
Grund, warum es "nur funktioniert": Vim liest tatsächlich, argv[0]um über sein Verhalten zu entscheiden. Es ist ein allgemeiner Trick; AFAIK manchmal auch GCC und Bash.
Franklin Yu
10
vim -R <file>

erlaubt schreiben mit :w!

vim -c ":set nomodifiable"  <file>

Verhindert, dass der Benutzer Änderungen an der Datei im Puffer vornimmt. Aber der Benutzer könnte den Puffer mit änderbar machen:set modifiable

Du könntest benutzen

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

um zu verhindern, dass der Benutzer die Funktion "nicht änderbar" ausschaltet, und um dem Benutzer das Beenden durch Drücken von zu ermöglichen q. In diesem Fall kann der Benutzer jedoch überhaupt nicht in den Befehlsmodus wechseln. Dies kann möglicherweise das sein, was Sie möchten oder auch nicht.

Sie können die Datei auch mit dem Befehl less öffnen:

less <file>

Anzeigen der Datei in einer vim-ähnlichen Umgebung, jedoch ohne die Möglichkeit, die Datei zu ändern.

Jay
quelle
+1 für die Verwendung less, obwohl, wie @nxdrvr darauf hinweist, Sie die v- Taste drücken können, um die Datei im bearbeitbaren Modus invi
Sheharyar
9

Kleine Antwort auf die akzeptierte Antwort: Sie können dies in Ihrer Shell aliasen, um es auf einen einzelnen Befehl zu reduzieren. In bash können Sie beispielsweise Folgendes in Ihre .bashrc-Datei einfügen:

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

(Verschiedene Shells haben unterschiedliche Formate, aber Sie haben die Idee)

Ich hätte dies als Kommentar zu der akzeptierten Antwort hinzugefügt, aber es schien nicht möglich zu sein, einen mehrzeiligen "Code" -Block in einem Kommentar zu haben, und (auf jeden Fall in Bash) muss der obige Code wirklich sein in 3 separaten Zeilen.

Chirael
quelle
6

So zeigen Sie die Datei nur an, ohne sie bearbeiten zu können:

cat <file> | less

In können lessSie durch Drücken der vTaste in den "Dateibearbeitungsmodus" wechseln . Sie können die Standardeingabe jedoch nicht bearbeiten. Wenn Sie also die Ausgabe cat <file>auf weniger setzen, lesswird der Bearbeitungsmodus beim Drücken von 'v' beendet.

Für vim der gleiche Ansatz

cat <file> | vim -
nxdrvr
quelle
4
Danke für den vVorschlag. Raffiniert.
Tshepang
2
+1, aber keine Notwendigkeit für cat. Verwenden Sie einfach <FILENAME less.
Sparhawk
@Sparkhawk, <file> lesswürde einen Fehler geben, ich nehme an, Sie meinten dies less <file>, aber wie in der Antwort erläutert less, könnte der Benutzer bei direkter Verwendung die v- Taste drücken und in den Bearbeitungsmodus wechseln. Piping catto verhindert lessdies.
Sheharyar
@ Sheharyar Er meinte Ausgabeumleitung. Vielleicht kennen Sie sich damit besser aus. less < FILENAMEWenn Sie V drücken, erhalten Sie die Meldung "Standardeingabe kann nicht bearbeitet werden" . Ähnlich ist es mit Vim: vim - < FILENAME.
Franklin Yu
4

Für Emacs können Sie auch den Ansichtsmodus verwenden .

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

oder alternativ innerhalb eines Terminals:

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

Oder Sie können mein Wrapper-Skript verwenden


quelle
1

In Emacs können Sie tun

emacs FILE -f view-mode

Syntaxhervorhebung wird angewendet. Die Datei wird nicht nur als schreibgeschützter Puffer geöffnet. Einige Befehle, z. B. I-Search, sind in diesem Modus ohne die Steuertaste verfügbar.

jogama
quelle
0

Das Senden einer Datei an std out kann angesichts der Dateigröße akzeptabel sein

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

Ich werde hier niemandem die Antwort entziehen, aber ich möchte ein paar weitere Informationen über die Read-only ModeDatei hinzufügen . Gemäß der Originaldokumentation Nur- Lese-Modus In manchen Fällen möchten Sie eine Datei anzeigen , diese jedoch vor versehentlichen Tastenanschlägen und Änderungen schützen. (Möglicherweise möchten Sie eine längere Datei aufrufen, um vi-Bewegungen zu üben, oder Sie möchten durch eine Befehlsdatei oder ein Programm blättern.) Sie können eine Datei im schreibgeschützten Modus eingeben und alle vi-Bewegungsbefehle verwenden, die Datei kann jedoch nicht geändert werden.

Geben Sie Folgendes ein, um eine Datei im schreibgeschützten Modus anzuzeigen:

$ vi -R file

oder:

$ view file

(Der Befehl view kann wie der Befehl vi eine beliebige Befehlszeilenoption verwenden, um zu einer bestimmten Stelle in der Datei zu gelangen.) Wenn Sie Änderungen an der Datei vornehmen möchten, können Sie den schreibgeschützten Modus durch überschreiben Hinzufügen eines Ausrufezeichens zum Schreibbefehl:

:w!
or:

:wq!

Wenn Sie ein Problem beim Schreiben der Datei haben.

Weitere Informationen finden Sie hier

Md Haidar Ali Khan
quelle