¿Usted intentó :help sety :help lety leer el manual?
hochl
55
Sí, lo hice, pero todavía no entiendo por qué tiene que existir el set, porque hagamos lo mismo.
Dave Halter
1
@DavidHalter: letno hace lo mismo. Hay cosas con las que no puedes lograr setque son posibles let, mira mi respuesta.
René Nyffenegger
44
Nadie ha mencionado setlocalaún ... son equivalentes a las &l:*variables.
Chris Morgan
1
@VictorZamanian: para configuraciones booleanas, es posiblemente más fácil simplemente set noico set ic. Por lo que sé, settambién es compatible con lo vique let, como supongo , no lo es.
René Nyffenegger
Respuestas:
144
:setes para configurar opciones , :letpara asignar un valor a una variable .
Sucede que el valor de una opción está vinculado al nombre de la opción precedido por a &(la &option-nameconstrucción se comporta muy similar a las variables "ordinarias"). Entonces, los siguientes son equivalentes:
:set tw=40
:let &tw=40
Pero, por ejemplo, no se puede asignar 50 a la variable global foo ( :let g:foo=50) con un :setcomando (porque g: foo es una variable y no una opción).
Algunas opciones son booleanas. Al configurar estos, no se necesita ningún valor (como en :set noicy lo contrario :set ic).
re:, :set nowrapoptions.txt (: help set-option) dice:: se [t] {option} Alternar opción: establecer, encenderlo. Opción de número: mostrar valor. Opción de cadena: mostrar valor. Esto no está de acuerdo con lo que tiene aquí, cuando dice 'establecerá el valor predeterminado para la opción wrap'. ??
Vista elíptica
@Ellipticalview Estoy un poco confundido. Está citando partes de la documentación. Si lees todo esto, encontrarás que está de acuerdo con todos mis casos. [Nota: las noopciones prefijadas pueden ser confusas. También nota option&al final tiene una &que puede haber perdido].
sehe
12
:setsolo funciona con opciones, y la respuesta de sehe muestra algunos buenos ejemplos de uso.
:letPor otro lado, puede hacer casi todo lo que :setpuede hacer, y más. Puede asignar un valor a
una variable, por ejemplo let vi = 'vim'
una opción, por ejemplo let &tw = 40
un registro, por ejemplo let @a = $HOME . '/vimfiles'
una variable de entorno, p. ej. let $NOTHING = 'NOTHING'
Otra diferencia importante es que el lado derecho de :letes una expresión , lo que significa que puede hacer cosas como la concatenación de cadenas (como se ve en mi ejemplo de registro anterior) y operaciones aritméticas (por ejemplo let &tw = 40 + 60). Esto también significa que debe citar el valor si es una cadena. :setpor otro lado lee el valor literalmente.
Es más fácil de usar :setcon las opciones, aunque :lettambién puede hacer la mayor parte, aquí hay algunas comparaciones usando los ejemplos de sehe ("n / a" significa que no hay forma de hacerlo :let)
:verbose set vs n / a (no creo que haya otra forma de enumerar todas las opciones)
:set tw=40vs :let &tw = 40(sí, puedes usar la misma taquigrafía lettambién)
:set wrap& vs n / a
:set nowrapvs :let &wrap = 0(para opciones booleanas, 0 es falso y 1 es verdadero)
:set wrap! vs :let &wrap = !&wrap
Algunos ejemplos más
imprime el valor de una opción: :set formatoptions?vs :echo &formatoptions( letno imprime valores, a diferencia set)
establecer la opción local: setlocal etvslet &l:et = 1
Ver :h :sety :h :letpara más detalles
tl; dr
:setsolo funciona con opciones, pero la sintaxis es mucho más simple. :letfunciona no solo con opciones, sino también con variables, registros y variables de entorno. A diferencia :set, el lado derecho de :letes una expresión.
Ampliando lo que la gente ha escrito :let, he notado que se puede usar para asignar un valor en una variable a una opción, algo :setno puede hacer. Por ejemplo, esta función utiliza letpara asignar el valor en la variable global orig_twa la textwidthopción:
" Toggle Autowrap
" Default of 72 but can be overridden by tw settings in other vimrc files
let g:orig_tw = 72
function Toggle_autowrap_mode()
if &textwidth == 0
" Must use let instead of set here in order for g:orig_tw to be
" evaluated properly
let &textwidth = g:orig_tw
echo "Autowrap mode on tw=" . &textwidth
else
let g:orig_tw = &textwidth
set textwidth=0
echo "Autowrap mode off tw=" . &textwidth
endif
endfunction
noremap _A :call Toggle_autowrap_mode()<CR>
Resumen:let permite asignar una variable a una opción: let &textwidth = g:orig_twy viceversa.
Serge Stroobandt
2
Es muy simple.
Como la gente ha dicho setes por opciones y funciona mejor debido a la limitación. También setes el comando histórico que todas las versiones viusan para configurar sus opciones. La mayoría (¿todas?) Otras versiones de vino tienen let.
Pero posiblemente lo más importante es que setfunciona en todas las versiones de vim, el letcomando se puede omitir cuando compila vim. El estándar tinyy las smallcompilaciones hacen esto.
Si falta, lette da el error: E319: Sorry, the command is not available in this version
Nota: ify endiftampoco se implementan, vim.tinypero en este caso los comandos no dan un error, sino que todo lo que está entre los dos comandos se omite INCLUYENDO else.
:help sety:help lety leer el manual?letno hace lo mismo. Hay cosas con las que no puedes lograrsetque son posibleslet, mira mi respuesta.setlocalaún ... son equivalentes a las&l:*variables.set noicoset ic. Por lo que sé,settambién es compatible con loviquelet, como supongo , no lo es.Respuestas:
:setes para configurar opciones ,:letpara asignar un valor a una variable .Sucede que el valor de una opción está vinculado al nombre de la opción precedido por a
&(la&option-nameconstrucción se comporta muy similar a las variables "ordinarias"). Entonces, los siguientes son equivalentes:Pero, por ejemplo, no se puede asignar 50 a la variable global foo (
:let g:foo=50) con un:setcomando (porque g: foo es una variable y no una opción).Algunas opciones son booleanas. Al configurar estos, no se necesita ningún valor (como en
:set noicy lo contrario:set ic).fuente
Set es una interfaz más fácil de usar especializada en opciones
P.ej
para mostrar todas las opciones vigentes.
Trabajará como una taquigrafía para
set textwidth=40Establecerá el valor predeterminado para la opción
wrapDesarmará la opción
Se alternar la opción
Más importante,
Pocos de los anteriores se pueden lograr (fácilmente) con
let.fuente
:set nowrapoptions.txt (: help set-option) dice:: se [t] {option} Alternar opción: establecer, encenderlo. Opción de número: mostrar valor. Opción de cadena: mostrar valor. Esto no está de acuerdo con lo que tiene aquí, cuando dice 'establecerá el valor predeterminado para la opción wrap'. ??noopciones prefijadas pueden ser confusas. También notaoption&al final tiene una&que puede haber perdido].:setsolo funciona con opciones, y la respuesta de sehe muestra algunos buenos ejemplos de uso.:letPor otro lado, puede hacer casi todo lo que:setpuede hacer, y más. Puede asignar un valor alet vi = 'vim'let &tw = 40let @a = $HOME . '/vimfiles'let $NOTHING = 'NOTHING'Otra diferencia importante es que el lado derecho de
:letes una expresión , lo que significa que puede hacer cosas como la concatenación de cadenas (como se ve en mi ejemplo de registro anterior) y operaciones aritméticas (por ejemplolet &tw = 40 + 60). Esto también significa que debe citar el valor si es una cadena.:setpor otro lado lee el valor literalmente.Es más fácil de usar
:setcon las opciones, aunque:lettambién puede hacer la mayor parte, aquí hay algunas comparaciones usando los ejemplos de sehe ("n / a" significa que no hay forma de hacerlo:let):verbose setvs n / a (no creo que haya otra forma de enumerar todas las opciones):set tw=40vs:let &tw = 40(sí, puedes usar la misma taquigrafíalettambién):set wrap&vs n / a:set nowrapvs:let &wrap = 0(para opciones booleanas, 0 es falso y 1 es verdadero):set wrap!vs:let &wrap = !&wrapAlgunos ejemplos más
:set formatoptions?vs:echo &formatoptions(letno imprime valores, a diferenciaset)asignando a múltiples opciones al mismo tiempo:
vs
establecer opción global:
setglobal etvslet &g:et = 1setlocal etvslet &l:et = 1Ver
:h :sety:h :letpara más detallestl; dr
:setsolo funciona con opciones, pero la sintaxis es mucho más simple.:letfunciona no solo con opciones, sino también con variables, registros y variables de entorno. A diferencia:set, el lado derecho de:letes una expresión.fuente
Ampliando lo que la gente ha escrito
:let, he notado que se puede usar para asignar un valor en una variable a una opción, algo:setno puede hacer. Por ejemplo, esta función utilizaletpara asignar el valor en la variable globalorig_twa latextwidthopción:fuente
letpermite asignar una variable a una opción:let &textwidth = g:orig_twy viceversa.Es muy simple.
Como la gente ha dicho
setes por opciones y funciona mejor debido a la limitación. Tambiénsetes el comando histórico que todas las versionesviusan para configurar sus opciones. La mayoría (¿todas?) Otras versiones devino tienenlet.Pero posiblemente lo más importante es que
setfunciona en todas las versiones devim, elletcomando se puede omitir cuando compilavim. El estándartinyy lassmallcompilaciones hacen esto.Si falta,
lette da el error:E319: Sorry, the command is not available in this versionNota:
ifyendiftampoco se implementan,vim.tinypero en este caso los comandos no dan un error, sino que todo lo que está entre los dos comandos se omite INCLUYENDOelse.fuente