76

Есть ли способ сообщить emacs/vi/vim (из командной строки), что я хочу просматривать файл в view-mode или read-only .

Я знаю, как открыть файл только для чтения, если emacs/vi/vim уже запущен.

10 ответов10

145

vim -R имя файла

43

Для Emacs:

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

Там нет опции запуска для принудительного чтения только.

Редактировать:
Если вы поместите эту маленькую функцию в скрипт запуска оболочки (например, .bashrc), вы можете открыть файл только для чтения, набрав ev file_to_view

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

просмотреть имя файла

В основном vim в режиме только для чтения; Simples!

Как подсказывает комментарий, в случае, если view связано с простым vi , здесь приведены команды bash, которые сначала проверяют ситуацию, а затем исправляют ее:

# 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)
10
vim -R <file>

позволяет писать с помощью :w!

vim -c ":set nomodifiable"  <file>

Запрещает пользователю вносить какие-либо изменения в файл в буфере. Но пользователь может сделать буфер модифицируемым с помощью :set modifiable

Вы могли бы использовать

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

чтобы предотвратить отключение пользователем "nomodifiable", и позволить пользователю выйти, нажав q . Но тогда пользователь вообще не может войти в командный режим, который может быть или не быть тем, что вы хотите.

Вы также можете открыть файл с помощью команды less:

less <file>

Для просмотра файла в vim-подобной среде, но без возможности изменить файл.

8

Небольшое продолжение принятого ответа: вы можете использовать псевдоним в своей оболочке, чтобы свести его к одной команде. Например, в bash вы можете поместить в ваш .bashrc следующее:

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

(разные оболочки будут иметь разные форматы для этого, но вы поняли)

Я бы добавил это в качестве комментария в ответ на принятый ответ, но не представляется возможным иметь многострочный блок "кода" в комментарии, и (в любом случае, в bash) приведенный выше код действительно должен быть на 3 отдельные строки.

6

Чтобы просто просмотреть файл без возможности редактирования:

cat <file> | less

В less вы можете перейти в "режим редактирования файла", нажав клавишу v . Но вы не можете редактировать стандартного ввода, так перенаправив вывод cat <file> менее, останавливается less от перехода в режим редактирования «» на нажатие "V".

Для VIM тот же подход

cat <file> | vim -
4

Для emacs вы также можете использовать режим просмотра.

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

или альтернатива внутри терминала:

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

Или вы можете использовать мой скрипт

1

В Emacs вы можете сделать

emacs FILE -f view-mode

Подсветка синтаксиса применяется. Он не просто открывает файл как буфер только для чтения. В этом режиме некоторые команды, такие как I-search, доступны без клавиши управления.

0

отправка файла в std out, может быть приемлемой, учитывая размер файла

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

Я не собираюсь отказываться от чьего-либо ответа пользователя здесь, но я хотел бы добавить еще немного информации о файле Read-only Mode . Согласно режиму «Только для чтения», в некоторых случаях вы хотите просмотреть файл, но хотите защитить его от случайных нажатий клавиш и изменений. (Возможно, вы захотите вызвать длинный файл, чтобы попрактиковаться в перемещениях vi, или вы можете прокрутить командный файл или программу). Вы можете ввести файл в режиме только для чтения и использовать все команды перемещения vi, но вы не сможете изменить файл.

Чтобы посмотреть файл в режиме только для чтения, введите:

$ vi -R file

или же:

$ view file

(Команда view, как и команда vi, может использовать любой из параметров командной строки для перехода к определенному месту в файле.) Если вы решили внести некоторые изменения в файл, вы можете переопределить режим только для чтения, добавив восклицательный знак в команду записи:

:w!
or:

:wq!

Если у вас есть проблемы с записью файла.

Для дальнейшей ссылки здесь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .