Câu trả lời:
let
gán giá trị cho một biến và set
gán giá trị cho một trong các tùy chọn nội bộ của Vim.
Ví dụ: bạn sẽ sử dụng
:let mystring='Hello!'
để khai báo một biến mới, nhưng bạn sẽ sử dụng
:set tabstop=4
hoặc là
:set expandtab
để đặt một trong các tùy chọn của Vim.
Xem thêm: :help let
, :help set
.
g:
chỉ đơn giản là biểu thị một biến toàn cục. Có một vài trong số các "không gian tên biến" này :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
được sử dụng cho các tùy chọn nội bộ và xử lý các loại tùy chọn. Nó cho phép những thứ như đảo ngược các tùy chọn boolean (ví dụ :set invpaste
) thêm và xóa cài đặt khỏi danh sách (ví dụ :set dictionary-=/tmp/myfile
).
:let
mặt khác, cho phép truy cập vào rất nhiều thứ có thể thay đổi trong vim, bao gồm các biến thông thường, tùy chọn, thanh ghi, v.v. và giá trị được đặt là kết quả của việc đánh giá một biểu thức, thay vì một giá trị đơn giản như với :set
, có nghĩa là :let
cung cấp cho bạn quyền truy cập vào toán học, thao tác chuỗi và các hàm.
Ví dụ: bạn có thể :let &dictionary=/tmp/myfile
đặt tùy chọn 'dictionary'
thành /tmp/myfile
(do đó sửa đổi cùng tùy chọn được hiển thị ở trên trong :set
ví dụ)
Bạn có thể đặt một biến toàn cục với :let g:myvar=42
. Tiền tố bạn hỏi về cung cấp phạm vi. Câu trả lời của Doorknob bao trùm phạm vi rất tốt.
Bạn có thể :let @a="Some text"
thay đổi nội dung đăng ký a để chứa Some text
, "ap
ví dụ sau này bạn có thể dán .
Bạn có thể :let $PATH = $PATH . ":/home/me/bin"
nối thêm thư mục bin của riêng bạn vào PATH
biến môi trường, được chuyển đến bất kỳ lệnh bên ngoài nào được thực hiện bởi Vim (điều này hoạt động cho bất kỳ biến môi trường nào).
Mặc dù let
có một số khả năng khá mạnh mẽ (như :let $MYFILE = @%
đặt biến môi trường thành tên tệp của bộ đệm hiện tại), nhưng không biết rằng cài đặt là boolean, vì vậy nó không cung cấp quyền truy cập hay kiểm tra lỗi như thế :set
nào.
Cuối cùng, đó là về việc sử dụng công cụ tốt nhất cho công việc. Nếu bạn chỉ muốn sửa đổi một tùy chọn, :set
là công cụ của bạn. Nếu bạn muốn di chuyển thông tin giữa các thanh ghi, tùy chọn, biến hoặc dựa trên giá trị của kết quả của một biểu thức, thì đó :let
là công cụ của bạn.
Mặc dù bạn đã hỏi rõ ràng về Vim, một điều khác cần lưu ý là :set
phổ biến hơn trong các họ vi / Vim, nơi :let
ít phổ biến hơn (ví dụ: nvi không có let
lệnh và viemu không cung cấp quyền truy cập vào các thanh ghi thông qua let
) .
let
cách thực hiệnlet &{option name}=value