emacs / vi / vimを使用してコマンドラインからファイルを読み取り専用で開くにはどうすればよいですか


79

私は、ファイルを表示する(コマンドラインから)/ VI / vimのemacsの指示する方法がある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に投票できるといいのですが。
ロバートカルホーン14

145

vim -Rファイル名


4
素晴らしい作品が、私はvimの上でemacsのを好むので、私はトレイ・の答えを受け入れた
Nifle

32
そして、すべてのvimユーザーは「受け入れられた答え」以上にそれを支持することによって復venをします:D
Xosofox

1
注:一部のボックスには「view」コマンドがあり、「vi -R」のエイリアスであるようです。
armyofda12mnkeys

26

ファイル名を表示

基本的に読み取り専用モードでvim。シンプル!

コメントで示唆されているように、case viewがplain 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コマンドを使用します。
ゲイリージョン

1
「ちょうど動作する」理由:Vimは実際にargv[0]動作を決定するために読み取ります。これは一般的なトリックです。私の知る限り、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のキーをにeditiableモードでファイルを開くためにvi
Sheharyar

9

受け入れられた答えへの小さなフォローアップ:これをシェルでエイリアス化して、単一のコマンドに減らすことができます。たとえば、bashでは、.bashrcに次のものを追加できます。

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

(これを行うための異なるシェルには異なるフォーマットがありますが、あなたはアイデアを得る)

私はこれを受け入れられた回答への返信としてコメントとして追加しますが、コメントに複数行の「コード」ブロックを含めることは不可能と思われ、(とにかく)上記のコードは本当に必要です3つの別々の行に。


6

編集する機能なしでファイルを表示するには:

cat <file> | less

lessあなたを押して「編集ファイルモード」に行くことができますvキーを押します。ただし、標準入力を編集することはできないため、「v」を押すと出力を「cat <file>less」にパイプするlessと「編集」モードに移行しなくなります。

vimについても同じアプローチ

cat <file> | vim -

4
v提案をありがとう。気の利いた。
tshepang 14

2
+1、ただしの必要はありませんcat。使用するだけ<FILENAME lessです。
Sparhawk

@Sparkhawk、<file> lessエラーを与えるだろう、私はあなたが意味するless <file>と仮定していますが、答えで説明したように、less直接使用する場合、ユーザーはvキーを押して編集モードに入ることができます。パイピングcatにより、lessこれが発生するのを防ぎます。
-Sheharyar

@Sheharyar彼は出力のリダイレクトを意味しました。Vless < FILENAMEを押すと、「標準入力を編集できません」ということがわかります。Vimでも同様です。vim - < FILENAME
フランクリンゆう

4

emacsの場合、view-modeも使用できます

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ファイルについてさらに情報を追加したいと思います。oreillyのドキュメントによると、読み取り専用モードファイルを表示したいが、そのファイルを不注意なキーストロークや変更から保護したい場合があります。(viの動作を練習するために長いファイルを呼び出したい場合や、コマンドファイルまたはプログラムをスクロールしたい場合があります)。読み取り専用モードでファイルを入力し、すべてのvi移動コマンドを使用できますが、ファイルを変更することはできません。

読み取り専用モードでファイルを表示するには、次のいずれかを入力します。

$ vi -R file

または:

$ view file

(viコマンドのようなviewコマンドは、ファイル内の特定の場所に進むためのコマンドラインオプションのいずれかを使用できます。)ファイルを編集することにした場合は、次の方法で読み取り専用モードをオーバーライドできます。書き込みコマンドに感嘆符を追加する:

:w!
or:

:wq!

ファイルの書き込みに問題がある場合。

詳細についてはこちらをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.