VISUAL vs EDITOR - apa bedanya?

182

Saya biasanya mengatur variabel lingkungan VISUALdan keduanya EDITORke hal yang sama, tetapi apa bedanya? Mengapa saya mengaturnya secara berbeda? Saat mengembangkan aplikasi, mengapa saya harus memilih untuk melihat VISUALsebelum EDITORatau sebaliknya?

xenoterracide
sumber

Jawaban:

145

The EDITOREditor harus dapat bekerja tanpa menggunakan fungsi terminal "canggih" (seperti lama edatau exmodus vi). Itu digunakan pada terminal teletype.

Sebuah VISUALEditor bisa menjadi layar editor penuh sebagai viatau emacs.

Misalnya, jika Anda memohon editor melalui bash (menggunakan C-x C-e), bash akan mencoba VISUALeditor pertama dan kemudian, jika VISUALgagal (karena terminal tidak mendukung editor layar penuh), ia mencoba EDITOR.

Saat ini, Anda dapat membiarkannya EDITORtidak disetel atau disetel vi -e.

andcoz
sumber
9
Sebagian besar aplikasi memperlakukan $VISUALsebagai potongan shell yang mereka tambahkan nama file (dikutip-shell), tetapi beberapa memperlakukannya sebagai nama yang dapat dieksekusi yang mungkin atau mungkin tidak mereka cari $PATH. Jadi yang terbaik adalah mengatur VISUAL(dan EDITOR) ke path lengkap ke executable (yang bisa menjadi skrip wrapper jika Anda ingin misalnya opsi).
Gilles
4
Di zaman modern, eddan yang serupa tidak terlalu populer, jadi saya percaya tidak apa-apa untuk diabaikan VISUALdan digunakan EDITOR.
Pavel Šimerda
13
Terima kasih atas tip tentang C-x C-ebash. Sangat berguna.
mndrix
5
@ PavelŠimerda, pengaturan saja EDITORtidak cukup misalnya untuk gitdi Ubuntu 12.04. Tanpa VISUALdisetel gitmengabaikan EDITORdan hanya menggunakan nano(dikompilasi secara default, saya kira).
maxschlepzig
5
@ PavelŠimerda Itu tidak masuk akal, tapi ini konvensi. EDITOR dulu untuk editor berbasis instruksi seperti ed. Ketika editor dengan GUI muncul - dan oleh GUI, maksud saya CLI GUI (vim, emacs, dll. - pikirkan ncurses), bukan GUI lingkungan desktop - proses pengeditan berubah secara dramatis, sehingga kebutuhan untuk variabel lain muncul. Dalam konteks ini, CLI GUI dan lingkungan desktop editor GUI kurang lebih sama, sehingga Anda dapat mengatur VISUAL baik; namun, EDITOR dimaksudkan untuk alur kerja yang berbeda secara fundamental. Tentu saja, ini semua historis. Tidak ada yang menggunakan ed hari ini.
Zenexer
32

Jawaban yang diterima mungkin merupakan perlakuan yang baik dan singkat, tetapi ini akan menjadi upaya untuk lebih dalam ketika perbedaan antara VISUAL dan EDITOR mungkin masih penting (membangun jawaban Adam Katz ).

Spesifikasi POSIX masih membedakan antara editor mode visual dan editor baris. Ini sangat penting di masa ketika posisi kursor melalui koneksi serial sulit (terutama karena kecepatan koneksi serial). The artikel Wikipedia untuk vi memberikan beberapa latar belakang yang berguna pada perbedaan antara vi (mode editor visual) dan mantan (editor line). Jika Anda menggali cukup dalam penelitian, Anda akan menemukan bagian "RATIONALE" dari spec "ex" , yang memberikan alasan untuk perbedaan yang masih ada dalam spec:

Diakui bahwa sebagian vi akan sulit, jika bukan tidak mungkin, untuk diterapkan secara memuaskan pada terminal mode blok, atau terminal tanpa bentuk pengalamatan kursor apa pun, sehingga bukan persyaratan wajib bahwa fitur tersebut harus bekerja pada semua terminal . Namun demikian, maksudnya adalah bahwa implementasi vi harus menyediakan set lengkap kemampuan pada semua terminal yang mampu mendukungnya.

Saya tidak memerlukan ini sejak melepaskan modem 300 baud saya, tetapi saya dapat membayangkan bahwa orang-orang yang menggunakan jalur serial lambat untuk terhubung ke sistem tertanam (dan / atau melalui koneksi yang benar-benar tidak pasti) mungkin masih menghargai dapat memiliki mode jalur yang disukai editor yang berbeda dari editor "visual" seperti vi. Kode terminal VT100-gaya atas koneksi lossy, laggy, sempit mungkin "mengasapi" dalam aplikasi terbatas.

Bagi kita semua, tampaknya jawaban yang "benar" tampaknya adalah "atur keduanya menjadi editor pilihan Anda". Mungkin tidak apa-apa untuk mengkooptasi perbedaan ini untuk editor lokal / grafis (misal Sublime atau gvim) vs editor jendela terminal (mis. Vi atau emacs), tetapi kemungkinan ada segunung warisan alasan mengapa hal itu mungkin tidak akan berfungsi seperti yang diharapkan .

Robla
sumber
2

Beberapa alat hanya menerima EDITOR, misalnya shell builtin fc :

-e ENAME  select which editor to use.  Default is FCEDIT, then EDITOR, then vi
Steven Penny
sumber
1

Saya telah menyimpulkan bahwa $VISUALitu grafis dan $EDITORbaris perintah. Jika tidak terdefinisi, pencarian apa pun $VISUAL harus dicoba $EDITORselanjutnya.

( Kutipan diperlukan: Saya ingin mendapatkan dokumentasi yang tepat, mungkin halaman manual atau spesifikasi POSIX?)

Saat ini, saya memiliki barang-barang seperti ini di ~/.bashrcdan ~/.zshrc:

EDITOR="$(command -v vim)"

# we have gvim, not in an SSH term, and the X11 display number is under 10
if command -v gvim >/dev/null 2>&1 \
&& [ "$SSH_TTY$DISPLAY" = "${DISPLAY#*:[1-9][0-9]}" ]; then
  export VISUAL="$(command -v gvim) -f"
  SUDO_EDITOR="$VISUAL"
else
  SUDO_EDITOR="$EDITOR"
fi

gvimtanpa -ftidak akan bekerja dengan program-program yang berharap untuk bertindak pada suntingan Anda. Ini pasti termasuk sudoeditor( sudo -e).

Ini dapat rusak jika Anda memiliki spasi putih di jalur ke vim. Jika itu masalah, instal dengan benar atau pertimbangkan symlink/usr/local/bin/gvim

Adam Katz
sumber
Apakah akan menggunakan $VISUALtergantung apakah Anda memiliki terminal yang mampu menentukan posisi kursor, bukan apakah Anda memiliki sistem jendela.
Radon Rosborough
Ah, bagus! Bisakah Anda memberikan tautan referensi yang pasti untuk itu? Saya pikir kode saya masih aman karena saya juga memeriksa $DISPLAY, tetapi itu bagus untuk diketahui.
Adam Katz
Sudahlah, sepertinya referensi seperti itu ada dalam jawaban robla , yang bahkan menyebutkan jawaban saya.
Adam Katz
0

Karena sepertinya tidak ada lingkungan di mana vi atau yang serupa akan gagal, saya telah mengambil pengaturan VISUAL untuk sesuatu yang memerlukan X DISPLAY, dan EDITOR untuk ex.

Sebagian besar, itu sepertinya membuat saya masalah ketika beberapa program tidak menggunakan VISUAL.

Mike William Meyer
sumber