Czy istnieje sposób, aby powiedzieć emacs / vi / vim (z wiersza poleceń), że chcę wyświetlić plik w view-modelub read-only.
Wiem, jak otworzyć plik tylko do odczytu, jeśli emacs / vi / vim już działa.
Czy istnieje sposób, aby powiedzieć emacs / vi / vim (z wiersza poleceń), że chcę wyświetlić plik w view-modelub read-only.
Wiem, jak otworzyć plik tylko do odczytu, jeśli emacs / vi / vim już działa.
Odpowiedzi:
W przypadku emacsa:
emacs FILE --eval '(setq buffer-read-only t)'
Nie ma opcji uruchamiania wymuszającej tylko odczyt.
Edycja:
Jeśli umieścisz tę małą funkcję w skrypcie uruchamiania powłoki (na przykład .bashrc), możesz otworzyć plik tylko do odczytu, wpisującev file_to_view
ev() {
emacs "$1" --eval '(setq buffer-read-only t)'
}
vim -R nazwa pliku
wyświetl nazwę pliku
Zasadniczo vim w trybie tylko do odczytu; proste!
Jak wskazano w komentarzu, w przypadku, gdy viewjest on powiązany z zwykłym vi, oto polecenia bash , aby najpierw sprawdzić sytuację, a następnie naprawić:
# 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)
vimpodświetlanie składni, ale viewnie masz , być może viewjest to link do minimalnej wersji vim, która nie ma wkompilowanego podświetlania składni. Porównaj wyniki :versionpolecenia.
argv[0]aby zdecydować o swoim zachowaniu. To powszechna sztuczka; AFAIK czasami GCC i Bash również to robią.
vim -R <file>
pozwala pisać z :w!
vim -c ":set nomodifiable" <file>
Zapobiega wprowadzaniu przez użytkownika jakichkolwiek zmian w pliku w buforze. Ale użytkownik może zmodyfikować bufor za pomocą:set modifiable
Możesz użyć
vim -c ":noremap q :q<cr>" -c ":map : <Esc>" -c ":set nomodifiable" <file>
aby uniemożliwić użytkownikowi wyłączenie opcji „nomodifiable” i pozwolić użytkownikowi wyjść z menu, naciskając q. Ale wtedy użytkownik nie może w ogóle przejść do trybu poleceń, co może być lub nie być tym, czego chcesz.
Możesz także otworzyć plik za pomocą polecenia less:
less <file>
Aby wyświetlić plik w środowisku podobnym do vima, ale bez możliwości zmiany pliku.
less, chociaż jak wskazuje @nxdrvr, możesz nacisnąć klawisz v , aby otworzyć plik w trybie edytowalnym wvi
Drobne działania następcze w stosunku do zaakceptowanej odpowiedzi: Możesz dokonać aliasu w powłoce, aby zredukować ją do pojedynczego polecenia. Na przykład w bash możesz umieścić następujące .bashrc:
emacsro() {
emacs $1 --eval '(setq buffer-read-only t)'
}
(różne powłoki będą miały do tego różne formaty, ale masz pomysł)
Dodałbym to jako komentarz w odpowiedzi na zaakceptowaną odpowiedź, ale nie wydaje się możliwe, aby w komentarzu znajdował się wieloliniowy blok „kodu” i (w skrócie) powyższy kod naprawdę musi być na 3 osobnych liniach.
Aby wyświetlić plik bez możliwości edycji:
cat <file> | less
W lessmożna przejść do trybu „Edycja pliku” przez naciśnięcie vklawisza. Ale nie możesz edytować standardowego wejścia, więc przesyłanie danych wyjściowych cat <file>do mniej, przestaje lessprzechodzić do trybu edycji po naciśnięciu „v”.
Dla vima to samo podejście
cat <file> | vim -
vsugestię. Fajne
cat. Po prostu użyj <FILENAME less.
<file> lessdałby błąd, zakładam, że miałeś na myśli less <file>, ale jak wyjaśniono w odpowiedzi, przy lessbezpośrednim użyciu użytkownik może nacisnąć klawisz v i przejść do trybu edycji. Rurociągi, cataby lesstemu zapobiec.
less < FILENAME, co daje „nie można edytować standardowe wejście” po naciśnięciu V . Podobnie z vim: vim - < FILENAME.
W przypadku emacsa możesz także użyć trybu widoku .
emacsclient --create-frame --eval '(view-file "/tmp/EXAMPLE")'
lub alternatywnie w terminalu:
emacsclient --nw --eval '(view-file "/tmp/EXAMPLE")'
Lub możesz użyć mojego skryptu opakowania
wysyłanie pliku do standardowego wyjścia może być dopuszczalne, biorąc pod uwagę rozmiar pliku
cat <file> # dump whole file to stdout
head <file> # view the first few lines
tail <file> # view the last n lines
Nie zamierzam zdyskredytować żadnej odpowiedzi użytkownika tutaj, ale chciałbym dodać więcej informacji o Read-only Modepliku. Zgodnie z dokumentacją oreilly Tryb tylko do odczytu Będą chwile, kiedy chcesz spojrzeć na plik, ale chcesz zabezpieczyć ten plik przed przypadkowymi naciśnięciami klawiszy i zmianami. (Możesz chcieć wywołać długi plik, aby ćwiczyć ruchy vi, lub możesz przewinąć plik poleceń lub program). Możesz wprowadzić plik w trybie tylko do odczytu i użyć wszystkich poleceń ruchu vi, ale nie będziesz mógł go zmienić.
Aby wyświetlić plik w trybie tylko do odczytu, wprowadź:
$ vi -R file
lub:
$ view file
(Polecenie view, podobnie jak polecenie vi, może korzystać z dowolnej opcji wiersza polecenia, aby przejść do określonego miejsca w pliku). Jeśli zdecydujesz się na edycję pliku, możesz zastąpić tryb tylko do odczytu dodając wykrzyknik do polecenia write:
:w!
or:
:wq!
Jeśli masz problem z zapisaniem pliku.
W celu uzyskania dalszych informacji tutaj