Як я можу відкрити файл лише для читання з командного рядка за допомогою 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 ім'я файлу



32
І всі користувачі Vim помстяться, звертаючись до них, ніж до "прийнятої відповіді": D
Xosofox

1
Примітка: деякі поля, мабуть, мають команду "view", можливо, псевдоніми до "vi -R".
armyofda12mnkeys

26

переглянути ім'я файлу

В основному vim в режимі лише для читання; симпле!

Як натякає коментар, у випадку, якщо 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
Немає підкреслення синтаксису.
Ніфле

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 <file>

Перегляд файлу у середовищі, подібному до vim, але без можливості змінити файл.


+1 для використання less, хоча як зазначає @nxdrvr, ви можете натиснути клавішу v, щоб відкрити файл у редагованому режимі вvi
Шехаряр,

9

Невелике подання до прийнятої відповіді: Ви можете вказати цей псевдонім у своїй оболонці, щоб зменшити його до однієї команди. Наприклад, у bash ви можете помістити у свій .bashrc:

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

(різні оболонки матимуть різні формати для цього, але ви розумієте)

Я додав би це як коментар у відповідь на прийняту відповідь, але, здавалося, неможливо мати в рядку коментаря багаторядковий блок «код», і (в іншому випадку) вищенаведений код справді повинен бути на 3 окремих рядки.


6

Щоб просто переглянути файл без можливості редагування:

cat <file> | less

У lessви можете перейти в «режим редагування файлу», натиснувши vклавішу. Але ти не можеш редагувати стандартний вхід, тому cat <file>перехід на вихід до меншого розміру перестає lessпереходити в режим «редагування» натисканням кнопки «v».

Для vim той же підхід

cat <file> | vim -

4
Дякую за vпропозицію. Ніфт.
thepang

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, може бути прийнятним з огляду на розмір файлу

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файл. Відповідно до документації oreilly Режим лише для читання Будуть випадки, коли ви хочете переглянути файл, але хочете захистити цей файл від ненавмисних натискань клавіш і змін. (Можливо, ви захочете зателефонувати у тривалий файл, щоб практикувати переміщення vi, або ви можете прокрутити командний файл або програму). Ви можете ввести файл у режимі лише для читання та використовувати всі команди vi-руху, але змінити файл ви не зможете.

Щоб переглянути файл у режимі лише для читання, введіть або:

$ vi -R file

або:

$ view file

(Команда view, як і команда vi, може використовувати будь-який з параметрів командного рядка для просування до певного місця у файлі.) Якщо ви вирішите внести деякі зміни у файл, ви можете змінити режим лише для читання додавання знаку оклику до команди write:

:w!
or:

:wq!

Якщо у вас є проблема з написанням файлу.

Для подальшої посилання тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.