Gibt es eine Möglichkeit Emacs / vi / vim zu erzählen (von der Kommandozeile) , dass ich die Datei in anzeigen möchte view-mode
oder read-only
.
Ich kann eine Datei als schreibgeschützt öffnen, wenn emacs / vi / vim bereits ausgeführt wird.
Gibt es eine Möglichkeit Emacs / vi / vim zu erzählen (von der Kommandozeile) , dass ich die Datei in anzeigen möchte view-mode
oder read-only
.
Ich kann eine Datei als schreibgeschützt öffnen, wenn emacs / vi / vim bereits ausgeführt wird.
Antworten:
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)'
}
vim -R Dateiname
Dateiname anzeigen
Grundsätzlich vim im Nur-Lese-Modus; Simples!
Wie durch Kommentar angedeutet, im Fall view
zu 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)
vim
Syntax-Hervorhebung aktiviert ist, Ihre view
jedoch nicht, ist Ihre möglicherweise view
ein Link zu einer Minimalversion vim
, in der keine Syntax-Hervorhebung kompiliert ist. Vergleichen Sie die Ausgaben des :version
Befehls.
argv[0]
um über sein Verhalten zu entscheiden. Es ist ein allgemeiner Trick; AFAIK manchmal auch GCC und Bash.
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.
less
, obwohl, wie @nxdrvr darauf hinweist, Sie die v- Taste drücken können, um die Datei im bearbeitbaren Modus invi
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.
So zeigen Sie die Datei nur an, ohne sie bearbeiten zu können:
cat <file> | less
In können less
Sie 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, less
wird der Bearbeitungsmodus beim Drücken von 'v' beendet.
Für vim der gleiche Ansatz
cat <file> | vim -
v
Vorschlag. Raffiniert.
cat
. Verwenden Sie einfach <FILENAME less
.
<file> less
wü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 cat
to verhindert less
dies.
less < FILENAME
Wenn Sie V drücken, erhalten Sie die Meldung "Standardeingabe kann nicht bearbeitet werden" . Ähnlich ist es mit Vim: vim - < FILENAME
.
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
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
Ich werde hier niemandem die Antwort entziehen, aber ich möchte ein paar weitere Informationen über die Read-only Mode
Datei 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