Bagaimana saya bisa membuka file read-only dari command line dengan emacs / vi / vim


79

Apakah ada cara untuk memberi tahu emacs / vi / vim (dari baris perintah) bahwa saya ingin melihat file di view-modeatau read-only.

Saya tahu cara membuka file sebagai hanya baca jika emacs / vi / vim sudah berjalan.


Catatan: jika Anda tidak memiliki izin tulis untuk file tersebut, Vim secara default akan membukanya dalam mode read-only. Sebenarnya, saya pikir lebih mudah untuk mengontrol izin file daripada menyediakan cara "baca-saja".
Franklin Yu

Jawaban:


45

Untuk emacs:

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

Tidak ada opsi startup untuk memaksa membaca saja.

Sunting:
Jika Anda meletakkan fungsi kecil ini di skrip startup shell Anda (.bashrc misalnya), Anda dapat membuka file hanya-baca dengan mengetikev file_to_view

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

11
Saya berharap saya bisa downvote emacs untuk ini.
Robert Calhoun

145

vim -R nama file


4
Berfungsi bagus tetapi saya menerima jawaban Trey karena saya lebih suka emacs daripada vim
Nifle

32
Dan semua pengguna vim membalas dendam dengan meningkatkannya ke lebih dari "jawaban yang diterima": D
Xosofox

1
Catatan: beberapa kotak tampaknya memiliki perintah 'view' mungkin alias 'vi -R'.
armyofda12mnkeys

26

lihat nama file

Pada dasarnya vim dalam mode read-only; simples!

Seperti yang diisyaratkan oleh komentar, jika viewdikaitkan dengan plain vi, berikut adalah perintah bash untuk memeriksa situasi terlebih dahulu dan kemudian memperbaikinya:

# 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
Tidak ada penyorotan sintaks.
Nifle

7
@Nifle: Seharusnya tidak ada perbedaan dalam penyorotan sintaksis. Jika Anda vimmemiliki penyorotan sintaks tetapi Anda viewtidak, mungkin Anda viewadalah tautan ke versi minimal vimyang tidak dikompilasi dengan penyorotan sintaks. Bandingkan hasil dari :versionperintah.
garyjohn

1
Alasan mengapa itu "hanya bekerja": Vim sebenarnya akan membaca argv[0]untuk memutuskan perilakunya. Ini adalah trik umum; AFAIK terkadang GCC dan Bash melakukan ini juga.
Franklin Yu

10
vim -R <file>

memungkinkan menulis dengan :w!

vim -c ":set nomodifiable"  <file>

Mencegah pengguna membuat perubahan apa pun pada file di buffer. Tetapi pengguna dapat membuat buffer dapat dimodifikasi dengan:set modifiable

Anda bisa menggunakannya

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

untuk mencegah pengguna mematikan "nomodifiable", dan memungkinkan pengguna untuk berhenti dengan menekan q. Tapi, maka pengguna tidak bisa masuk ke mode perintah sama sekali, yang mungkin atau mungkin tidak sesuai keinginan Anda.

Anda juga bisa membuka file dengan perintah less:

less <file>

Untuk melihat file dalam lingkungan seperti vim tetapi tanpa kemampuan untuk mengubah file.


+1 untuk digunakan less, meskipun sebagaimana @nxdrvr tunjukkan, Anda dapat menekan tombol v untuk membuka file dalam mode yang dapat diedit divi
Sheharyar

9

Tindak lanjut kecil untuk jawaban yang diterima: Anda bisa alias ini di shell Anda untuk menguranginya menjadi satu perintah. Misalnya di bash Anda bisa meletakkan yang berikut di .bashrc Anda:

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

(shell yang berbeda akan memiliki format yang berbeda untuk melakukan ini, tetapi Anda mendapatkan ide)

Saya akan menambahkan ini sebagai komentar sebagai jawaban atas jawaban yang diterima, tetapi sepertinya tidak mungkin untuk memiliki blok "kode" multi-baris dalam komentar, dan (dalam bash pula) kode di atas benar-benar perlu pada 3 baris terpisah.


6

Untuk hanya melihat file tanpa kemampuan untuk mengedit:

cat <file> | less

Di lessAnda dapat pergi ke "edit file mode" dengan menekan vtombol. Tetapi Anda tidak dapat mengedit input standar, jadi perpipaan output cat <file>menjadi kurang, berhenti lessdari pergi ke mode 'edit' dengan menekan 'v'.

Untuk vim, pendekatan yang sama

cat <file> | vim -

4
Terima kasih untuk vsarannya. Bagus.
tshepang

2
+1, tetapi tidak perlu cat. Gunakan saja <FILENAME less.
Sparhawk

@Sparkhawk, <file> lessakan memberikan kesalahan, saya anggap Anda maksud less <file>, tetapi seperti yang dijelaskan dalam jawaban, ketika menggunakan lesssecara langsung, pengguna dapat menekan tombol v dan masuk ke mode edit. Perpipaan catuntuk lessmenghentikan hal ini terjadi.
Sheharyar

@Sheharyar Maksudnya pengalihan output. Mungkin Anda lebih akrab dengan less < FILENAME, yang memberikan Anda "Tidak dapat mengedit input standar" saat Anda menekan V . Demikian pula dengan Vim: vim - < FILENAME.
Franklin Yu

4

Untuk emacs Anda juga dapat menggunakan mode tampilan .

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

atau alternatif di dalam terminal:

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

Atau Anda dapat menggunakan skrip pembungkus saya


1

Di emacs bisa Anda lakukan

emacs FILE -f view-mode

Penyorotan sintaks diterapkan. Itu tidak hanya membuka file sebagai buffer hanya baca. Beberapa perintah, seperti pencarian-I, dapat diakses tanpa kunci kontrol dalam mode ini.


0

mengirim file ke std out, mungkin dapat diterima mengingat ukuran file

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

0

Saya tidak akan berdiskusi dengan siapa pun yang dijawab oleh pengguna di sini, tetapi saya ingin menambahkan beberapa info tentang Read-only Modefile. Sesuai dokumentasi murni Mode Hanya Baca. Akan ada saatnya Anda ingin melihat file tetapi ingin melindungi file itu dari penekanan tombol dan perubahan yang tidak disengaja. (Anda mungkin ingin memanggil file yang panjang untuk mempraktikkan gerakan vi, atau Anda mungkin ingin menelusuri file perintah atau program). Anda dapat memasukkan file dalam mode read-only dan menggunakan semua perintah gerakan vi, tetapi Anda tidak akan dapat mengubah file.

Untuk melihat file dalam mode hanya baca, masukkan:

$ vi -R file

atau:

$ view file

(Perintah tampilan, seperti perintah vi, dapat menggunakan opsi baris perintah untuk memajukan ke tempat tertentu dalam file.) Jika Anda memutuskan untuk mengedit file, Anda dapat mengganti mode hanya baca dengan menambahkan tanda seru ke perintah tulis:

:w!
or:

:wq!

Jika Anda memiliki masalah dalam menulis file.

Untuk referensi lebih lanjut di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.