ฉันมักจะตั้งค่าตัวแปรทั้งสองVISUAL
และEDITOR
สภาพแวดล้อมให้เหมือนกัน แต่ความแตกต่างคืออะไร ทำไมฉันต้องตั้งค่าพวกเขาแตกต่างกันอย่างไร เมื่อพัฒนาแอพทำไมฉันต้องเลือกVISUAL
ดูก่อนEDITOR
หรือในทางกลับกัน
ฉันมักจะตั้งค่าตัวแปรทั้งสองVISUAL
และEDITOR
สภาพแวดล้อมให้เหมือนกัน แต่ความแตกต่างคืออะไร ทำไมฉันต้องตั้งค่าพวกเขาแตกต่างกันอย่างไร เมื่อพัฒนาแอพทำไมฉันต้องเลือกVISUAL
ดูก่อนEDITOR
หรือในทางกลับกัน
คำตอบ:
EDITOR
แก้ไขควรจะสามารถทำงานได้โดยไม่ต้องใช้ "ขั้นสูง" ฟังก์ชั่นมินัล (เหมือนเก่าed
หรือex
โหมดของการvi
) มันถูกใช้กับเทอร์มินัลโทรพิมพ์
VISUAL
แก้ไขอาจจะมีการแก้ไขแบบเต็มหน้าจอเป็นหรือvi
emacs
เช่นถ้าคุณเรียกบรรณาธิการผ่านทุบตี (ใช้C-x C-e
) ทุบตีจะพยายามครั้งแรกที่VISUAL
แก้ไขแล้วถ้าVISUAL
ล้มเหลว (เพราะขั้วไม่สนับสนุนการแก้ไขแบบเต็มหน้าจอ) EDITOR
ก็พยายาม
ปัจจุบันคุณสามารถออกจากการตั้งค่าหรือตั้งค่าให้EDITOR
vi -e
ed
และที่คล้ายกันไม่เป็นที่นิยมมากดังนั้นผมเชื่อว่ามันเป็น OK เพื่อเพียงไม่สนใจและการใช้งานVISUAL
EDITOR
C-x C-e
ในการทุบตี มีประโยชน์มาก
EDITOR
ไม่เพียงพอสำหรับgit
Ubuntu 12.04 โดยไม่VISUAL
ถูกตั้งค่าgit
ละเว้นEDITOR
และเพียงแค่ใช้nano
(รวบรวมในค่าเริ่มต้นฉันเดา)
ed
เคยเป็นบรรณาธิการสำหรับการเรียนการสอนตามชอบ เมื่อบรรณาธิการที่มี GUIs เกิดขึ้น - และโดย GUI ฉันหมายถึง CLI GUI (vim, emacs และอื่น ๆ - คิดว่า ncurses) ไม่ใช่ GUI environment บนเดสก์ท็อป - กระบวนการแก้ไขเปลี่ยนแปลงไปอย่างมากดังนั้นความต้องการตัวแปรอื่นจึงเกิดขึ้น ในบริบทนี้ตัวแก้ไข GUI CLI GUI และเดสก์ท็อปสภาพแวดล้อมเดสก์ท็อปนั้นเหมือนกันมากหรือน้อยดังนั้นคุณสามารถตั้งค่า VISUAL ให้เป็นอย่างใดอย่างหนึ่ง อย่างไรก็ตาม EDITOR นั้นมีไว้สำหรับเวิร์กโฟลว์ที่แตกต่างกันโดยพื้นฐาน แน่นอนว่านี่คือประวัติศาสตร์ทั้งหมด ไม่มีใครใช้ ed วันนี้
คำตอบที่ได้รับการยอมรับอาจจะเป็นที่ดีรักษาสั้น ๆ แต่นี้จะเป็นความพยายามที่จะไปลึกเมื่อความแตกต่างระหว่างภาพและการแก้ไขอาจจะยังคงเป็นเรื่อง (อาคารในคำตอบอดัมแคทซ์ )
ข้อมูลจำเพาะ POSIX ยังคงแยกความแตกต่างระหว่างตัวแก้ไขโหมดภาพและตัวแก้ไขบรรทัด สิ่งนี้สำคัญมากในวันที่การวางเคอร์เซอร์บนการเชื่อมต่อแบบอนุกรมนั้นยาก (โดยเฉพาะอย่างยิ่งเนื่องจากความเร็วของการเชื่อมต่อแบบอนุกรม) บทความวิกิพีเดีย viให้พื้นหลังที่มีประโยชน์บางอย่างเกี่ยวกับความแตกต่างระหว่าง vi (บรรณาธิการโหมดภาพ) และอดีต (บรรณาธิการบรรทัด) หากคุณขุดลึกลงไปในการวิจัยคุณจะพบส่วน "RATIONALE" ของข้อมูลจำเพาะ "ex"ซึ่งให้เหตุผลในการแยกความแตกต่างที่ยังอยู่ในข้อมูลจำเพาะ:
เป็นที่ยอมรับว่าส่วนของ vi จะเป็นเรื่องยากหากไม่สามารถดำเนินการได้อย่างน่าพอใจบนเทอร์มินัลโหมดบล็อกหรือเทอร์มินัลที่ไม่มีเคอร์เซอร์ในรูปแบบใด ๆ ดังนั้นจึงไม่ใช่ข้อกำหนดบังคับที่คุณสมบัติดังกล่าว . อย่างไรก็ตามเป็นความตั้งใจที่การใช้งาน vi ควรให้ความสามารถเต็มรูปแบบบนเทอร์มินัลทั้งหมดที่สามารถรองรับได้
ฉันไม่ได้ต้องการสิ่งนี้หลังจากเลิกใช้โมเด็ม 300 baud ของฉันแล้ว แต่ฉันสามารถจินตนาการได้ว่าผู้ที่ใช้สายอนุกรมแบบช้าเพื่อเชื่อมต่อกับระบบฝังตัว (และ / หรือผ่านการเชื่อมต่อแบบลูกเต๋า) อาจยังคงชื่นชมได้ว่ามีโหมดสายที่ต้องการ เครื่องมือแก้ไขแตกต่างจากเครื่องมือ "visual" เช่น vi รหัสเทอร์มินัลสไตล์ VT100 เหนือการเชื่อมต่อที่สูญเสียความล่าช้าและแคบอาจเป็น "bloat" ในแอปพลิเคชันที่ จำกัด
สำหรับพวกเราที่เหลือดูเหมือนว่าคำตอบที่ "ถูกต้อง" น่าจะเป็น "ตั้งค่าให้ทั้งคู่เป็นตัวแก้ไขที่คุณต้องการ" มันอาจจะโอเคที่จะเลือกใช้ความแตกต่างนี้สำหรับโปรแกรมแก้ไขในพื้นที่ / กราฟิก (เช่น Sublime หรือ gvim) เทียบกับโปรแกรมแก้ไขหน้าต่างเทอร์มินัล (เช่น vi หรือ emacs) แต่มีแนวโน้มที่จะมีเหตุผลมากมาย .
เครื่องมือบางตัวยอมรับเฉพาะ EDITOR เท่านั้นเช่น shell builtin fc :
-e ENAME select which editor to use. Default is FCEDIT, then EDITOR, then vi
ฉันได้ข้อสรุปว่า$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
หรือไม่ขึ้นอยู่กับว่าคุณมีเทอร์มินัลที่สามารถวางตำแหน่งเคอร์เซอร์ได้หรือไม่ไม่ว่าคุณจะมีระบบหน้าต่างที่พร้อมใช้งานหรือไม่
$DISPLAY
ด้วย แต่ก็ดีที่จะรู้
เนื่องจากดูเหมือนว่าจะไม่มีสภาพแวดล้อมใด ๆ ที่ vi หรือที่คล้ายกันจะล้มเหลวฉันจึงต้องตั้งค่า VISUAL ให้เป็นบางสิ่งที่ต้องการ X DISPLAY และ EDITOR ถึง ex
ส่วนใหญ่ดูเหมือนว่าจะทำให้ฉันเกิดปัญหาเมื่อบางโปรแกรมไม่ได้ใช้ VISUAL
$VISUAL
เป็นข้อมูลโค้ดของเชลล์ที่พวกเขาผนวกชื่อไฟล์ (ที่ยกมาด้วยเชลล์) แต่บางโปรแกรมก็ถือว่าเป็นชื่อของไฟล์ที่เรียกใช้งานซึ่งอาจค้นหาได้หรือไม่$PATH
ก็ได้ ดังนั้นจึงเป็นการดีที่สุดที่จะตั้งค่าVISUAL
(และEDITOR
) เป็นพา ธ แบบเต็มไปยังไฟล์ที่เรียกใช้งานได้ (ซึ่งอาจเป็นสคริปต์แรปเปอร์หากคุณต้องการตัวเลือกเช่น)