VISUAL so với EDITOR - sự khác biệt là gì?


182

Tôi thường đặt cả hai biến VISUALEDITORmôi trường cho cùng một thứ, nhưng sự khác biệt là gì? Tại sao tôi lại đặt chúng khác nhau? Khi phát triển ứng dụng, tại sao tôi nên chọn xem xét VISUALtrước EDITORhoặc ngược lại?

Câu trả lời:


145

Các EDITORbiên tập viên sẽ có thể làm việc mà không sử dụng các chức năng thiết bị đầu cuối "tiên tiến" (như cũ edhay exphương thức vi). Nó đã được sử dụng trên các thiết bị đầu cuối teletype.

Một VISUALtrình soạn thảo có thể là một trình soạn thảo toàn màn hình như vihoặc emacs.

Ví dụ: nếu bạn gọi trình soạn thảo thông qua bash (bằng cách sử dụng C-x C-e), bash sẽ thử VISUALtrình chỉnh sửa đầu tiên và sau đó, nếu VISUALthất bại (vì thiết bị đầu cuối không hỗ trợ trình chỉnh sửa toàn màn hình), nó sẽ thử EDITOR.

Ngày nay, bạn có thể EDITORbỏ đặt hoặc đặt thành vi -e.


9
Hầu hết các ứng dụng coi $VISUALnhư một đoạn mã shell mà chúng gắn tên tệp (trích dẫn shell) vào, nhưng một số ứng dụng coi đó là tên của một tệp thực thi mà chúng có thể hoặc không thể tìm kiếm $PATH. Vì vậy, tốt nhất là đặt VISUAL(và EDITOR) thành đường dẫn đầy đủ thành tệp thực thi (có thể là tập lệnh bao bọc nếu bạn muốn ví dụ tùy chọn).
Gilles

4
Trong thời hiện đại, edvà tương tự không phổ biến lắm nên tôi tin rằng chỉ cần bỏ qua VISUALvà sử dụng EDITOR.
Pavel imerda

13
Cảm ơn các mẹo về C-x C-ebash. Rất tiện dụng.
mndrix

5
@ PavelŠimerda, chỉ cài đặt EDITORlà không đủ, ví dụ như gittrên Ubuntu 12.04. Không VISUALđược thiết lập gitbỏ qua EDITORvà chỉ sử dụng nano(được biên dịch theo mặc định, tôi đoán).
maxschlepzig

5
@ PavelŠimerda Nó không có ý nghĩa, nhưng đó là quy ước. EDITOR đã từng được sử dụng cho các biên tập viên dựa trên hướng dẫn như thế nào ed. Khi các trình soạn thảo với GUI xuất hiện - và bởi GUI, ý tôi là GUI CLI (vim, emacs, v.v .-- think ncurses), không phải GUI môi trường máy tính để bàn - quá trình chỉnh sửa đã thay đổi đáng kể, do đó cần phải có một biến khác. Trong ngữ cảnh này, các trình soạn thảo GUI CLI GUI và môi trường máy tính để bàn ít nhiều giống nhau, vì vậy bạn có thể đặt VISUAL thành một trong hai; tuy nhiên, EDITOR có nghĩa là cho một quy trình công việc khác nhau cơ bản. Tất nhiên, đây là tất cả lịch sử. Không ai sử dụng ed những ngày này.
Zenexer

32

Câu trả lời được chấp nhận có lẽ là một cách đối xử tốt, ngắn, nhưng đây sẽ là một nỗ lực để đi sâu hơn khi sự khác biệt giữa VISUAL và EDITOR vẫn có thể quan trọng (dựa trên câu trả lời của Adam Katz ).

Thông số POSIX vẫn phân biệt giữa trình chỉnh sửa chế độ trực quan và trình chỉnh sửa dòng. Điều này thực sự quan trọng trở lại trong những ngày khi định vị con trỏ trên các kết nối nối tiếp là khó khăn (đặc biệt là do tốc độ của kết nối nối tiếp). Các bài viết trên Wikipedia cho vi cung cấp cho một số nền tảng hữu ích về sự khác biệt giữa vi (một trình soạn thảo chế độ hình ảnh) và cũ (một trình soạn thảo dòng). Nếu bạn đào sâu nghiên cứu, bạn sẽ tìm thấy phần "RATIONALE" của thông số "ex" , điều này đưa ra lý do cho sự khác biệt vẫn còn trong thông số kỹ thuật:

Người ta nhận thấy rằng các phần của vi sẽ rất khó, nếu không nói là không thể thực hiện thỏa đáng trên thiết bị đầu cuối chế độ khối hoặc thiết bị đầu cuối mà không có bất kỳ hình thức địa chỉ con trỏ nào, do đó không bắt buộc các tính năng đó phải hoạt động trên tất cả các thiết bị đầu cuối . Tuy nhiên, ý định là việc triển khai vi sẽ cung cấp đầy đủ các khả năng trên tất cả các thiết bị đầu cuối có khả năng hỗ trợ chúng.

Tôi không cần điều này kể từ khi từ bỏ modem 300 baud của mình, nhưng tôi có thể tưởng tượng rằng những người sử dụng các dòng nối tiếp chậm để kết nối với các hệ thống nhúng (và / hoặc qua các kết nối thực sự nguy hiểm) vẫn có thể đánh giá cao việc có chế độ dòng ưa thích trình chỉnh sửa khác với trình soạn thảo "trực quan" như vi. Mã thiết bị đầu cuối kiểu VT100 qua kết nối hẹp, chậm, hẹp có thể bị "phình to" trong các ứng dụng hạn chế.

Đối với phần còn lại của chúng tôi, dường như câu trả lời "chính xác" dường như là "đặt cả hai thành trình soạn thảo ưa thích của bạn". Có thể đồng ý chọn phân biệt này cho trình soạn thảo cục bộ / đồ họa (ví dụ Sublime hoặc gvim) so với trình chỉnh sửa cửa sổ đầu cuối (ví dụ vi hoặc emacs), nhưng có thể có hàng núi lý do tại sao điều đó có thể sẽ không hoạt động như mong đợi .


2

Một số công cụ chỉ chấp nhận EDITOR, ví dụ shell dựng sẵn fc :

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

1

Tôi đã kết luận đó $VISUALlà đồ họa và $EDITORlà dòng lệnh. Nếu không xác định, bất cứ điều gì tìm kiếm $VISUAL nên thử $EDITORtiếp theo.

( Cần dẫn nguồn: Tôi muốn nhận tài liệu phù hợp, có thể là trang dành cho nam hoặc thông số POSIX?)

Hiện tại, tôi có những thứ như thế này trong tôi ~/.bashrc~/.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

gvim-fkhông làm việc với các chương trình dự kiến ​​sẽ hành động theo các chỉnh sửa của bạn. Điều này chắc chắn bao gồm sudoeditor( sudo -e).

Điều này có thể phá vỡ nếu bạn có khoảng trắng trong đường dẫn đến vim. Nếu đó là một vấn đề, hãy cài đặt nó đúng cách hoặc xem xét các liên kết tượng trưng như/usr/local/bin/gvim


Việc sử dụng $VISUALhay không phụ thuộc vào việc bạn có thiết bị đầu cuối có khả năng định vị con trỏ hay không, chứ không phải bạn có hệ thống cửa sổ hay không.
Radon Rosborough

Tuyệt quá! Bạn có thể cung cấp một liên kết tham khảo dứt khoát cho điều đó? Tôi nghĩ rằng mã của tôi vẫn an toàn vì tôi cũng đang kiểm tra $DISPLAY, nhưng đó là điều tốt để biết.
Adam Katz

Đừng bận tâm, có vẻ như một tài liệu tham khảo như vậy tồn tại trong câu trả lời của robla , thậm chí còn đề cập đến câu trả lời của tôi.
Adam Katz

0

Vì dường như không có bất kỳ môi trường nào mà vi hoặc tương tự sẽ thất bại, tôi đã thực hiện cài đặt VISUAL thành một cái gì đó cần một HIỂN THỊ X và EDITOR.

Hầu hết, điều đó dường như gây ra sự cố cho tôi khi một số chương trình không sử dụng VISUAL.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.