Qual è la differenza tra let e set?


29

Non conosco molto della teoria alla base di Vim. Sembra che abbiamo setalcune variabili e letaltre variabili. Qual è la differenza e quando è richiesta una rispetto all'altra?

Inoltre, il sistema di colori vim solarizzato dice let g:blabla...qual è il significato g:in questo caso?

Risposte:


35

letassegna un valore a una variabile e setassegna un valore a una delle opzioni interne di Vim.

Ad esempio, useresti

:let mystring='Hello!'

per dichiarare una nuova variabile, ma useresti

:set tabstop=4

o

:set expandtab

per impostare una delle opzioni di Vim.

Vedi anche: :help let, :help set.

g:significa semplicemente una variabile globale. Esistono diversi di questi "spazi dei nomi variabili" :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
Fare nota che è possibile impostare le opzioni interne di vim usando letfacendolet &{option name}=value
EvergreenTree

11

:setviene utilizzato per le opzioni interne e gestisce i tipi di opzione. Consente cose come l'inversione di opzioni booleane (ad es. :set invpaste) L'aggiunta e la rimozione di impostazioni da un elenco (ad es :set dictionary-=/tmp/myfile.).

:letd'altra parte, consente l'accesso a una pletora di cose mutevoli in vim, tra cui variabili regolari, opzioni, registri, ecc. e il valore impostato è il risultato della valutazione di un'espressione, invece di un semplice valore come con :set, il che significa :letti dà accesso a matematica, manipolazione di stringhe e funzioni.

Ad esempio, è possibile :let &dictionary=/tmp/myfileimpostare l'opzione 'dictionary'su /tmp/myfile(modificando così la stessa opzione mostrata sopra :setnell'esempio)

È possibile impostare una variabile globale con :let g:myvar=42. Il prefisso di cui hai chiesto fornisce l'ambito. La risposta di Doorknob copre molto bene l'ambito.

È possibile :let @a="Some text"modificare il contenuto del registro a per contenere Some text, che è possibile incollare in seguito con "apad esempio.

È possibile :let $PATH = $PATH . ":/home/me/bin"aggiungere la propria directory bin alla PATHvariabile di ambiente, che viene passata a tutti i comandi esterni eseguiti da Vim (funziona per qualsiasi variabile di ambiente).

Sebbene letabbia alcune capacità piuttosto potenti (come :let $MYFILE = @%impostare una variabile di ambiente sul nome del file del buffer corrente), non sa che un'impostazione è un valore booleano, quindi non offre accessi piacevoli o verifica errori come :setfa.

Alla fine, si tratta di utilizzare lo strumento migliore per il lavoro. Se vuoi semplicemente modificare un'opzione, :setè il tuo strumento. Se vuoi spostare le informazioni tra registri, opzioni, variabili o basare il tuo valore sul risultato di un'espressione, allora :letè il tuo strumento.

Anche se hai chiesto esplicitamente di Vim, un'altra cosa da notare è che :setè più comune nelle famiglie vi / Vim, dove :letè meno comune (ad esempio, nvi non ha un letcomando e viemu non fornisce l'accesso ai registri tramite let) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.