Как я могу открыть файл только для чтения из командной строки с помощью emacs / vi / vim


79

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

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


Примечание: если у вас нет разрешения на запись в файл, Vim по умолчанию откроет его в режиме только для чтения. На самом деле, я думаю, что легче контролировать разрешение файла, чем предоставлять способ «только для чтения».
Франклин Ю

Ответы:


45

Для Emacs:

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

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

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

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

11
Я хотел бы понизить Emacs для этого.
Роберт Калхун

145

vim -R имя файла


4
Прекрасно работает, но я принял ответ Трея, потому что я предпочитаю emacs, а не vim
Nifle 29.10.10

32
И все пользователи vim отомстили, проголосовав за него больше, чем за «принятый ответ»: D
Xosofox

1
Примечание: в некоторых полях, похоже, есть команда 'view', возможно, псевдонимы 'vi -R'.
Armyofda12mnkeys

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)

1
Нет подсветки синтаксиса, хотя.
Nifle

7
@Nifle: Не должно быть никакой разницы в подсветке синтаксиса. Если у вас vimесть подсветка синтаксиса, но у вас viewее нет, возможно, viewэто ссылка на минимальную версию, в vimкоторой не скомпилирована подсветка синтаксиса. Сравните выходные данные :versionкоманды.
garyjohn

1
Причина, по которой он «просто работает»: Vim на самом деле будет читать, argv[0]чтобы определить свое поведение. Это обычная уловка; AFAIK иногда GCC и Bash делают это также.
Франклин Ю

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-подобной среде, но без возможности изменить файл.


+1 для использования less, хотя, как указывает @nxdrvr, вы можете нажать клавишу v, чтобы открыть файл в редактируемом режиме вvi
Sheharyar

9

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

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

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

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


6

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

cat <file> | less

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

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

cat <file> | vim -

4
Спасибо за vпредложение. Острота.
Чепанг

2
+1, но не нужно cat. Просто используйте <FILENAME less.
Sparhawk

@Sparkhawk, выдает <file> lessошибку, я полагаю, вы имели в виду less <file>, но, как объяснено в ответе, при lessнепосредственном использовании пользователь может нажать клавишу v и перейти в режим редактирования. Трубопровод, catчтобы lessэто не происходило.
Шехарьяр

@Sheharyar Он имел в виду перенаправление вывода. Может быть , вы больше знакомы с less < FILENAME, что дает вам «Не удается изменить стандартный ввод» при нажатии кнопки V . Аналогично с Vim: vim - < FILENAME.
Франклин Ю

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!

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.