Яка різниця між let та set?


29

Я не знаю багато теорії, що стоїть за Вімом. Це виглядає так, ніби ми setодні змінні та letінші змінні. Яка різниця, і коли один вимагається над іншим?

Крім того, соляризована схема кольорів vim говорить про let g:blabla...те, яке значення має g:в цьому випадку?

Відповіді:


35

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.

8
Зверніть увагу , що ви можете встановити внутрішні параметри VIM, використовуючи letроблячиlet &{option name}=value
EvergreenTree

11

: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) .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.