ฉันไม่รู้ทฤษฎีเบื้องหลัง Vim มากนัก ดูเหมือนว่าเราsetมีตัวแปรและletตัวแปรอื่น ๆ ความแตกต่างคืออะไรและเมื่อใดที่หนึ่งต้องการมากกว่าอีกอันหนึ่ง?
นอกจากนี้ solarchim vim colours พูดกับlet g:blabla...ความสำคัญของg:ในกรณีนี้คืออะไร?
ฉันไม่รู้ทฤษฎีเบื้องหลัง Vim มากนัก ดูเหมือนว่าเราsetมีตัวแปรและletตัวแปรอื่น ๆ ความแตกต่างคืออะไรและเมื่อใดที่หนึ่งต้องการมากกว่าอีกอันหนึ่ง?
นอกจากนี้ solarchim vim colours พูดกับlet g:blabla...ความสำคัญของg:ในกรณีนี้คืออะไร?
คำตอบ:
letกำหนดค่าให้กับตัวแปรและsetกำหนดค่าให้กับหนึ่งในตัวเลือกภายในของ Vim
ตัวอย่างเช่นคุณจะใช้
:let mystring='Hello!'
เพื่อประกาศตัวแปรใหม่ แต่คุณจะใช้
:set tabstop=4
หรือ
:set expandtab
เพื่อตั้งค่าหนึ่งในตัวเลือกของ Vim
ดูเพิ่มเติม: :help let, :help set.
g:เพียงแค่บ่งบอกถึงตัวแปรทั่วโลก มีหลาย "ตัวแปรเนมสเปซ" - จาก:help internal-variables:
(nothing) In a function: local to a function; otherwise: global
|buffer-variable| b: Local to the current buffer.
|window-variable| w: Local to the current window.
|tabpage-variable| t: Local to the current tab page.
|global-variable| g: Global.
|local-variable| l: Local to a function.
|script-variable| s: Local to a |:source|'ed Vim script.
|function-argument| a: Function argument (only inside a function).
|vim-variable| v: Global, predefined by Vim.
:setใช้สำหรับตัวเลือกภายในและจัดการกับชนิดของตัวเลือก มันช่วยให้สิ่งต่าง ๆ เช่นการผกผันของตัวเลือกบูลีน (เช่น:set invpaste) การเพิ่มและลบการตั้งค่าจากรายการ (เช่น:set dictionary-=/tmp/myfile)
:letในทางกลับกันอนุญาตให้เข้าถึงสิ่งที่เปลี่ยนแปลงได้มากมายในกลุ่มรวมถึงตัวแปรปกติตัวเลือกการลงทะเบียน ฯลฯ และค่าที่ตั้งไว้เป็นผลลัพธ์ของการประเมินค่านิพจน์แทนที่จะเป็นค่าอย่างง่ายเช่น:setซึ่งหมายความว่า:letให้คุณเข้าถึงคณิตศาสตร์การจัดการสตริงและฟังก์ชั่น
ตัวอย่างเช่นคุณสามารถ:let &dictionary=/tmp/myfileตั้งค่าตัวเลือก'dictionary'เป็น/tmp/myfile(เช่นการแก้ไขตัวเลือกเดียวกันที่แสดงด้านบนใน:setตัวอย่าง)
:let g:myvar=42คุณสามารถตั้งค่าตัวแปรระดับโลกที่มี คำนำหน้าคุณถามเกี่ยวกับขอบเขตให้ คำตอบของ Doorknob นั้นครอบคลุมการกำหนดขอบเขตอย่างดี
คุณสามารถ:let @a="Some text"เปลี่ยนเนื้อหาของ register a to contain Some textซึ่งคุณสามารถวางในภายหลัง"apได้
คุณสามารถ:let $PATH = $PATH . ":/home/me/bin"ผนวกไดเร็กทอรี bin ของคุณเองเข้ากับPATHตัวแปรสภาพแวดล้อมซึ่งส่งผ่านไปยังคำสั่งภายนอกที่เรียกใช้โดย Vim (สิ่งนี้ใช้ได้กับตัวแปรสภาพแวดล้อมใด ๆ )
แม้ว่าจะletมีความสามารถที่ทรงพลังบางอย่าง (เช่น:let $MYFILE = @%ตั้งค่าตัวแปรสภาพแวดล้อมเป็นชื่อไฟล์ของบัฟเฟอร์ปัจจุบัน) แต่ก็ไม่ทราบว่าการตั้งค่าเป็นบูลีนดังนั้นจึงไม่มีการเข้าถึงที่ดีหรือการตรวจสอบข้อผิดพลาดเช่น:setนั้น
ในที่สุดมันเกี่ยวกับการใช้เครื่องมือที่ดีที่สุดสำหรับงาน หากคุณต้องการแก้ไขตัวเลือกเพียงอย่างเดียว:setเป็นเครื่องมือของคุณ หากคุณต้องการย้ายข้อมูลไปมาระหว่างรีจิสเตอร์ตัวเลือกตัวแปรหรือฐานค่าของคุณตามผลลัพธ์ของนิพจน์แสดงว่า:letเป็นเครื่องมือของคุณ
แม้ว่าคุณจะถามเกี่ยวกับ Vim อย่างชัดเจน แต่สิ่งอื่นที่ควรทราบก็:setคือพบได้ทั่วไปในตระกูล vi / Vim ซึ่ง:letเป็นเรื่องธรรมดาน้อยกว่า (ตัวอย่างเช่น nvi ไม่มีletคำสั่งและ viemu ไม่ได้ให้การลงทะเบียนผ่านทางlet) .
letโดยทำlet &{option name}=value