Відповіді:
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з іншого боку, дозволяє отримати доступ до безлічі змінних речей у vim, включаючи регулярні змінні, параметри, регістри тощо. Значення, яке встановлюється, є результатом оцінки виразу, а не простого значення, наприклад, з :set, яке означає :letнадає вам доступ до математики, маніпулювання струнами та функцій.
Наприклад, ви можете :let &dictionary=/tmp/myfileвстановити опцію 'dictionary'до /tmp/myfile(таким чином , змінюючи один і той же варіант , показаний вище в :setприкладі)
Ви можете встановити глобальну змінну за допомогою :let g:myvar=42. Префікс, про який ви запитували, містить область. Відповідь Дорноба дуже добре висвітлює підбір результатів.
Ви можете :let @a="Some text"змінити вміст регістру a на вміст Some text, до якого згодом ви могли вставити, "apнаприклад.
Ви можете :let $PATH = $PATH . ":/home/me/bin"додати свій власний каталог бін до PATHзмінної середовища, який передається будь-яким зовнішнім командам, виконаним Vim (це працює для будь-якої змінної середовища).
Хоча letмає деякі досить потужні здібності (як, наприклад, :let $MYFILE = @%встановлення змінної середовища для імені файлу поточного буфера), він не знає, що налаштування є булевим, тому він не пропонує приємного доступу або перевірки помилок, як :setце робиться.
Зрештою, мова йде про використання найкращого інструменту для роботи. Якщо ви хочете просто змінити варіант, :setце ваш інструмент. Якщо ви хочете переміщувати інформацію між регістрами, опціями, змінними або базувати своє значення на результаті вираження, то :letце ваш інструмент.
Хоча ви прямо запитували про Vim, слід зазначити ще одне, що :setчастіше зустрічається у сім'ях vi / Vim, де :letрідше (наприклад, nvi не має letкоманди, а viemu не забезпечує доступ до регістрів через let) .
letроблячиlet &{option name}=value