:set
chỉ hoạt động với các tùy chọn và câu trả lời của sehe giới thiệu một số ví dụ sử dụng tốt.
:let
mặt khác có thể làm hầu hết mọi thứ :set
có thể làm, cộng với nhiều hơn nữa. Nó có thể gán giá trị cho
- một biến, vd
let vi = 'vim'
- một lựa chọn, vd
let &tw = 40
- một đăng ký, ví dụ
let @a = $HOME . '/vimfiles'
- một biến môi trường, vd
let $NOTHING = 'NOTHING'
Một sự khác biệt lớn nữa là phía bên phải :let
là một biểu thức , nghĩa là bạn có thể thực hiện những việc như nối chuỗi (như đã thấy trong ví dụ đăng ký của tôi ở trên) và các phép toán số học (ví dụ let &tw = 40 + 60
). Điều này cũng có nghĩa là bạn phải trích dẫn giá trị nếu đó là một chuỗi. :set
mặt khác đọc nguyên văn giá trị.
Nó dễ sử dụng hơn :set
với các tùy chọn mặc dù :let
cũng có thể thực hiện hầu hết các tùy chọn , Dưới đây là một số so sánh sử dụng các ví dụ của sehe ("n / a" có nghĩa là không có cách nào để làm điều đó :let
)
:verbose set
vs n / a (đừng nghĩ có một cách khác để liệt kê tất cả các tùy chọn)
:set tw=40
vs :let &tw = 40
(vâng, bạn cũng có thể sử dụng cùng tốc ký let
)
:set wrap&
so với không
:set nowrap
vs :let &wrap = 0
(đối với các tùy chọn boolean, 0 là sai và 1 là đúng)
:set wrap!
đấu với :let &wrap = !&wrap
Một vài ví dụ nữa
- in giá trị của một tùy chọn:
:set formatoptions?
vs :echo &formatoptions
( let
không in giá trị, không giống như set
)
gán cho nhiều tùy chọn cùng một lúc:
:set et sw=4 sts=4
đấu với
:let [&et, &sw, &sts] = [0, 4, 4]
đặt tùy chọn toàn cầu: setglobal et
vs.let &g:et = 1
- đặt tùy chọn cục bộ:
setlocal et
vs.let &l:et = 1
Xem :h :set
và :h :let
để biết thêm chi tiết
tl; dr
:set
chỉ hoạt động với các tùy chọn nhưng cú pháp đơn giản hơn nhiều. :let
làm việc với không chỉ các tùy chọn mà còn cả các biến, thanh ghi và biến môi trường. Không giống như :set
, phía bên tay phải :let
là một biểu thức.
:help set
và:help let
và đọc hướng dẫn?