ฉันไม่รู้ทฤษฎีเบื้องหลัง 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