VISUAL vs. EDITOR - อะไรคือความแตกต่าง?


182

ฉันมักจะตั้งค่าตัวแปรทั้งสองVISUALและEDITORสภาพแวดล้อมให้เหมือนกัน แต่ความแตกต่างคืออะไร ทำไมฉันต้องตั้งค่าพวกเขาแตกต่างกันอย่างไร เมื่อพัฒนาแอพทำไมฉันต้องเลือกVISUALดูก่อนEDITORหรือในทางกลับกัน

คำตอบ:


145

EDITORแก้ไขควรจะสามารถทำงานได้โดยไม่ต้องใช้ "ขั้นสูง" ฟังก์ชั่นมินัล (เหมือนเก่าedหรือexโหมดของการvi) มันถูกใช้กับเทอร์มินัลโทรพิมพ์

VISUALแก้ไขอาจจะมีการแก้ไขแบบเต็มหน้าจอเป็นหรือviemacs

เช่นถ้าคุณเรียกบรรณาธิการผ่านทุบตี (ใช้C-x C-e) ทุบตีจะพยายามครั้งแรกที่VISUALแก้ไขแล้วถ้าVISUALล้มเหลว (เพราะขั้วไม่สนับสนุนการแก้ไขแบบเต็มหน้าจอ) EDITORก็พยายาม

ปัจจุบันคุณสามารถออกจากการตั้งค่าหรือตั้งค่าให้EDITORvi -e


9
แอปพลิเคชันส่วนใหญ่ถือว่า$VISUALเป็นข้อมูลโค้ดของเชลล์ที่พวกเขาผนวกชื่อไฟล์ (ที่ยกมาด้วยเชลล์) แต่บางโปรแกรมก็ถือว่าเป็นชื่อของไฟล์ที่เรียกใช้งานซึ่งอาจค้นหาได้หรือไม่$PATHก็ได้ ดังนั้นจึงเป็นการดีที่สุดที่จะตั้งค่าVISUAL(และEDITOR) เป็นพา ธ แบบเต็มไปยังไฟล์ที่เรียกใช้งานได้ (ซึ่งอาจเป็นสคริปต์แรปเปอร์หากคุณต้องการตัวเลือกเช่น)
Gilles

4
ในยุคปัจจุบันedและที่คล้ายกันไม่เป็นที่นิยมมากดังนั้นผมเชื่อว่ามันเป็น OK เพื่อเพียงไม่สนใจและการใช้งานVISUAL EDITOR
Pavel Šimerda

13
ขอบคุณสำหรับเคล็ดลับC-x C-eในการทุบตี มีประโยชน์มาก
mndrix

5
@ PavelŠimerdaเพียงแค่การตั้งค่าEDITORไม่เพียงพอสำหรับgitUbuntu 12.04 โดยไม่VISUALถูกตั้งค่าgitละเว้นEDITORและเพียงแค่ใช้nano(รวบรวมในค่าเริ่มต้นฉันเดา)
maxschlepzig

5
@ PavelŠimerdaมันไม่สมเหตุสมผล แต่เป็นแบบแผน EDITOR edเคยเป็นบรรณาธิการสำหรับการเรียนการสอนตามชอบ เมื่อบรรณาธิการที่มี GUIs เกิดขึ้น - และโดย GUI ฉันหมายถึง CLI GUI (vim, emacs และอื่น ๆ - คิดว่า ncurses) ไม่ใช่ GUI environment บนเดสก์ท็อป - กระบวนการแก้ไขเปลี่ยนแปลงไปอย่างมากดังนั้นความต้องการตัวแปรอื่นจึงเกิดขึ้น ในบริบทนี้ตัวแก้ไข GUI CLI GUI และเดสก์ท็อปสภาพแวดล้อมเดสก์ท็อปนั้นเหมือนกันมากหรือน้อยดังนั้นคุณสามารถตั้งค่า VISUAL ให้เป็นอย่างใดอย่างหนึ่ง อย่างไรก็ตาม EDITOR นั้นมีไว้สำหรับเวิร์กโฟลว์ที่แตกต่างกันโดยพื้นฐาน แน่นอนว่านี่คือประวัติศาสตร์ทั้งหมด ไม่มีใครใช้ ed วันนี้
Zenexer

32

คำตอบที่ได้รับการยอมรับอาจจะเป็นที่ดีรักษาสั้น ๆ แต่นี้จะเป็นความพยายามที่จะไปลึกเมื่อความแตกต่างระหว่างภาพและการแก้ไขอาจจะยังคงเป็นเรื่อง (อาคารในคำตอบอดัมแคทซ์ )

ข้อมูลจำเพาะ POSIX ยังคงแยกความแตกต่างระหว่างตัวแก้ไขโหมดภาพและตัวแก้ไขบรรทัด สิ่งนี้สำคัญมากในวันที่การวางเคอร์เซอร์บนการเชื่อมต่อแบบอนุกรมนั้นยาก (โดยเฉพาะอย่างยิ่งเนื่องจากความเร็วของการเชื่อมต่อแบบอนุกรม) บทความวิกิพีเดีย viให้พื้นหลังที่มีประโยชน์บางอย่างเกี่ยวกับความแตกต่างระหว่าง vi (บรรณาธิการโหมดภาพ) และอดีต (บรรณาธิการบรรทัด) หากคุณขุดลึกลงไปในการวิจัยคุณจะพบส่วน "RATIONALE" ของข้อมูลจำเพาะ "ex"ซึ่งให้เหตุผลในการแยกความแตกต่างที่ยังอยู่ในข้อมูลจำเพาะ:

เป็นที่ยอมรับว่าส่วนของ vi จะเป็นเรื่องยากหากไม่สามารถดำเนินการได้อย่างน่าพอใจบนเทอร์มินัลโหมดบล็อกหรือเทอร์มินัลที่ไม่มีเคอร์เซอร์ในรูปแบบใด ๆ ดังนั้นจึงไม่ใช่ข้อกำหนดบังคับที่คุณสมบัติดังกล่าว . อย่างไรก็ตามเป็นความตั้งใจที่การใช้งาน vi ควรให้ความสามารถเต็มรูปแบบบนเทอร์มินัลทั้งหมดที่สามารถรองรับได้

ฉันไม่ได้ต้องการสิ่งนี้หลังจากเลิกใช้โมเด็ม 300 baud ของฉันแล้ว แต่ฉันสามารถจินตนาการได้ว่าผู้ที่ใช้สายอนุกรมแบบช้าเพื่อเชื่อมต่อกับระบบฝังตัว (และ / หรือผ่านการเชื่อมต่อแบบลูกเต๋า) อาจยังคงชื่นชมได้ว่ามีโหมดสายที่ต้องการ เครื่องมือแก้ไขแตกต่างจากเครื่องมือ "visual" เช่น vi รหัสเทอร์มินัลสไตล์ VT100 เหนือการเชื่อมต่อที่สูญเสียความล่าช้าและแคบอาจเป็น "bloat" ในแอปพลิเคชันที่ จำกัด

สำหรับพวกเราที่เหลือดูเหมือนว่าคำตอบที่ "ถูกต้อง" น่าจะเป็น "ตั้งค่าให้ทั้งคู่เป็นตัวแก้ไขที่คุณต้องการ" มันอาจจะโอเคที่จะเลือกใช้ความแตกต่างนี้สำหรับโปรแกรมแก้ไขในพื้นที่ / กราฟิก (เช่น Sublime หรือ gvim) เทียบกับโปรแกรมแก้ไขหน้าต่างเทอร์มินัล (เช่น vi หรือ emacs) แต่มีแนวโน้มที่จะมีเหตุผลมากมาย .



1

ฉันได้ข้อสรุปว่า$VISUALเป็นกราฟิกและ$EDITORเป็นบรรทัดคำสั่ง หากไม่ได้กำหนดการค้นหาอะไร$VISUAL ควรลอง$EDITORต่อไป

( ต้องการ:ฉันชอบที่จะได้รับเอกสารที่เหมาะสมอาจจะเป็นหน้าคนหรือข้อมูลจำเพาะ POSIX?)

ในขณะนี้ฉันมีสิ่งนี้ในของฉัน~/.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โดย-fไม่ทำงานกับโปรแกรมที่คาดว่าจะทำการแก้ไขของคุณ ซึ่งรวมถึงsudoeditor( sudo -e) อย่างแน่นอน

สิ่งนี้อาจแตกหากคุณมีช่องว่างในเส้นทางที่เป็นกลุ่ม หากนั่นเป็นปัญหาให้ติดตั้งให้ถูกวิธี/usr/local/bin/gvim


ว่าจะใช้$VISUALหรือไม่ขึ้นอยู่กับว่าคุณมีเทอร์มินัลที่สามารถวางตำแหน่งเคอร์เซอร์ได้หรือไม่ไม่ว่าคุณจะมีระบบหน้าต่างที่พร้อมใช้งานหรือไม่
Radon Rosborough

โอ้เยี่ยมมาก! คุณสามารถให้ลิงค์อ้างอิงที่ชัดเจนสำหรับสิ่งนั้นได้หรือไม่? ฉันคิดว่ารหัสของฉันยังปลอดภัยเนื่องจากฉันกำลังตรวจสอบ$DISPLAYด้วย แต่ก็ดีที่จะรู้
Adam Katz

ไม่เป็นไรดูเหมือนว่ามีการอ้างอิงดังกล่าวอยู่ในคำตอบของ Roblaซึ่งแม้จะกล่าวถึงคำตอบของฉัน
Adam Katz

0

เนื่องจากดูเหมือนว่าจะไม่มีสภาพแวดล้อมใด ๆ ที่ vi หรือที่คล้ายกันจะล้มเหลวฉันจึงต้องตั้งค่า VISUAL ให้เป็นบางสิ่งที่ต้องการ X DISPLAY และ EDITOR ถึง ex

ส่วนใหญ่ดูเหมือนว่าจะทำให้ฉันเกิดปัญหาเมื่อบางโปรแกรมไม่ได้ใช้ VISUAL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.