題 如何使用emacs / vi / vim從命令行以只讀方式打開文件


有沒有辦法告訴emacs / vi / vim(從命令行)我要查看該文件 view-mode 要么 read-only

我知道如果emacs / vi / vim已經運行,如何以只讀方式打開文件。


76
2017-10-28 09:46


起源


注意:如果您沒有該文件的寫入權限,Vim將默認以只讀模式打開它。實際上,我認為控製文件權限比提供“只讀”方式更容易。 - Franklin Yu


答案:


對於emacs:

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

沒有啟動選項強制只讀。

編輯:
如果將這個小函數放在shell啟動腳本(例如.bashrc)中,則可以通過鍵入以只讀方式打開文件 ev file_to_view 

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

43
2017-10-28 13:50



我希望我可以為此向下投票。 - Robert Calhoun


vim -R文件名


145
2017-10-28 09:51



工作得很好,但我接受了Trey的回答,因為我更喜歡emats over vim - Nifle
並且所有vim用戶都通過將其提升到超過“已接受的答案”來報復:D - Xosofox
注意:某些框似乎有'view'命令可能是'vi -R'的別名。 - armyofda12mnkeys


查看文件名

在只讀模式下基本上是vim; simples!

如評論所示,以防萬一 view 與平原有關 vi,這是 慶典 命令首先檢查情況然後修復它:

# 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)

26
2017-10-28 10:43



儘管沒有語法突出顯示。 - Nifle
@Nifle:語法高亮應該沒有任何區別。如果你的 vim 有語法高亮,但你的 view 不,也許是你的 view 是最小版本的鏈接 vim 沒有編譯的語法高亮。比較的輸出 :version 命令。 - garyjohn
它為什麼“正常工作”的原因:Vim實際上會讀 argv[0] 決定它的行為。這是一個常見的伎倆; AFAIK有時GCC和Bash也這樣做。 - Franklin Yu


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的環境中查看文件但無法更改文件。


10
2017-10-28 18:10



+1使用 less,雖然@nxdrvr指出你可以按下 v 用於在可編輯模式下打開文件的鍵 vi - Sheharyar


接受答案的小跟進:您可以在shell中對此進行別名,以將其減少為單個命令。例如,在bash中,您可以將以下內容放在.bashrc中:

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

(不同的shell會有不同的格式來做這個,但你明白了)

我會在回复已接受的答案時添加這個作為評論,但似乎在評論中沒有多行“代碼”塊,並且(無論如何)bash上面的代碼確實需要在3個單獨的行。


8
2017-10-31 23:50





要只查看無編輯功能的文件:

cat <file> | less

less 您可以按“轉到編輯文件模式” v 鍵。但你不能編輯標準輸入,所以輸出的輸出 cat <file> 減少,停止 less 按'v'進入'編輯'模式。

對於vim同樣的方法

cat <file> | vim -

5
2018-03-21 08:32



謝謝你 v 建議。俏皮。 - Tshepang
+1,但不需要 cat。只是用 <FILENAME less。 - Sparhawk
@Sparkhawk, <file> less 會給出錯誤,我假設你的意思 less <file>,但正如答案中所解釋的那樣,使用時 less 直接,用戶可以按 v 鍵並進入編輯模式。管道 cat 至 less 阻止這種情況發生。 - Sheharyar
@Sheharyar他的意思是輸出重定向。也許你更熟悉 less < FILENAME,按下時會顯示“無法編輯標準輸入” V。與Vim類似: vim - < FILENAME。 - Franklin Yu


對於emacs,您也可以使用 視圖模式

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

或終端內的替代方案:

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

或者你可以用我的 包裝腳本 


4
2017-09-12 15:01





在emacs中你可以做到

emacs FILE -f view-mode

應用語法突出顯示。它不只是將文件作為只讀緩衝區打開。在此模式下,可以在沒有控制鍵的情況下訪問某些命令,例如I-search。


1
2018-02-10 18:37





考慮到文件的大小,將文件發送到std out是可以接受的

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

0
2017-10-28 18:45





我不會在這裡向任何用戶回答discrad,但我想更多信息 Read-only Mode 文件。根據oreilly文檔 只讀模式 有時您希望查看文件但希望保護該文件免受無意的擊鍵和更改。 (您可能希望調用冗長的文件來練習vi移動,或者您可能想要滾動命令文件或程序)。您可以以只讀模式輸入文件並使用所有vi移動命令,但您將無法更改文件。

要以只讀模式查看文件,請輸入以下任一項:

$ vi -R file

要么:

$ view file

(與vi命令一樣,view命令可以使用任何命令行選項前進到文件中的特定位置。)如果您決定對文件進行一些編輯,則可以覆蓋只讀模式在write命令中添加一個感嘆號:

:w!
or:

:wq!

如果您在寫出文件時遇到問題。

進一步參考 這裡


0
2018-03-15 12:54