letとsetの違いは何ですか?


29

Vimの背後にある理論の多くは知りません。setいくつかの変数とlet他の変数のように見えます。違いは何ですか?一方が他方よりも必要な場合は?

また、ソラリゼーションされたvimカラースキームは、このインスタンスのlet g:blabla...重要性を何と言っていg:ますか?

回答:


35

let変数にset値を割り当て、Vimの内部オプションの1つに値を割り当てます。

たとえば、次を使用します

:let mystring='Hello!'

新しい変数を宣言するために使用しますが、

:set tabstop=4

または

:set expandtab

Vimのオプションの1つを設定します。

参照::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
を使用letしてvimの内部オプションを設定できることに注意してください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。尋ねたプレフィックスがスコープを提供します。Doorknobの答えは、スコーピングを非常によくカバーしています。

次のことができます:let @a="Some text"格納するためのレジスタの内容を変更するにはSome text、あとでで貼り付けることができ、"apたとえば。

次のことが可能:let $PATH = $PATH . ":/home/me/bin"に独自のbinディレクトリを追加するPATH(これは任意の環境変数のために働く)のVimで実行される任意の外部コマンドに渡される環境変数。

let(のようないくつかの非常に強力な能力を持っている:let $MYFILE = @%現在のバッファのファイル名に環境変数を設定するために)、それは素敵なアクセスまたはのようなエラー・チェック提供していないので、それは、設定がブール値であることを知らない:setんです。

最終的には、仕事に最適なツールを使用することです。オプションを単に変更したい場合:setは、あなたのツールです。レジスタ、オプション、変数間で情報を移動したい場合、または式の結果に基づいて値を作成したい場合:letは、ツールになります。

Vimについて明示的に尋ねましたが、注意すべきもう1つのことは、あまり一般的:set:letはないvi / Vimファミリでより一般的です(たとえば、nviにはletコマンドがなく、viemuは経由でレジスタへのアクセスを提供しませんlet) 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.