2012-09-27 33 views
6

es la siguiente pieza de la escritura de un plugin vim vim:cómo entender este script vim?

debería decir esa sintaxis de vim es un poco extraño:

  1. !exists("*s:SetVals"), por eso su es una Starmark antes s:?
  2. ¡función !, por qué hay! ¿personaje?
  3. & iskeyword, ¿es esta una variable, si es así, donde está definida?
  4. ¿Qué es s: y g:, cuál es la diferencia entre ellos?
  5. ¿por qué debería usarse? como let &dictionary = g:pydiction_location, ¿puedo cambiarlo para que sea &dictionary = g:pydiction_location?

si existe! ("* S: SetVals")

function! s:SetVals() 
     " Save and change any config values we need. 

     " Temporarily change isk to treat periods and opening 
     " parenthesis as part of a keyword -- so we can complete 
     " python modules and functions: 
     let s:pydiction_save_isk = &iskeyword 
     setlocal iskeyword +=.,(

     " Save any current dictionaries the user has set: 
     let s:pydiction_save_dictions = &dictionary 
     " Temporarily use only pydiction's dictionary: 
     let &dictionary = g:pydiction_location 

     " Save the ins-completion options the user has set: 
     let s:pydiction_save_cot = &completeopt 
     " Have the completion menu show up for one or more matches: 
     let &completeopt = "menu,menuone" 

     " Set the popup menu height: 
     let s:pydiction_save_pumheight = &pumheight 
     if !exists('g:pydiction_menu_height') 
      let g:pydiction_menu_height = 15 
     endif 
     let &pumheight = g:pydiction_menu_height 

     return '' 
    endfunction  

endif

+0

¿por qué la etiqueta 'python'? –

+0

@AshwiniChaudhary desde que python es invocado por este script :) – hugemeow

+2

Podría ser Ruby o Perl o Lua y no tiene nada que ver con su pregunta. – romainl

Respuesta

2

Ver :help eval.txt. Describe la mayoría de la sintaxis de vimscript.

+0

¿Cómo sabes que este archivo tiene la mayor parte de la especificación para el script de vim? ¿Hay alguna herramienta de compilación con la que pueda buscar todos los documentos buildin del vim? – hugemeow

+2

@hugemeow Ver ': h: helpgrep',': helpgrep' es el comando para buscar en todos los archivos de documentación. – ZyX

5

Puedo responder algunas de ellas, pero comenzaré con un comentario general inspirado en sus preguntas recientes.

Las respuestas a la mayoría de sus preguntas se presentan muy claramente en la documentación impresionante de Vim. Si realmente quieres usar Vim, debes saber cómo usarlo. Comience con :help y lea cuidadosamente. Vale la pena. Créeme.

Puede encontrar la respuesta a todas estas preguntas en :help expression.

  • !exists("*s:SetVals"), por eso su es una Starmark antes s:?

    Ver :help exists().

  • function!, ¿por qué hay un personaje de !?

    Sin un signo de admiración, Vim no reemplazará la definición anterior si usted reutiliza su secuencia de comandos.

  • &iskeyword, ¿es esta una variable, si es así, donde está definida?

    Así es como se prueba el valor de una opción vim en una secuencia de comandos. Ver :help iskeyword.

  • ¿Qué es s: y g:, cuál es la diferencia entre ellos?

    Estos son los espacios de nombres. Ver :help internal-variables

  • ¿por qué let se debe utilizar? como dejar &dictionary = g:pydiction_location, ¿puedo cambiarlo para que sea &dictionary = g:pydiction_location?

    No, no puedes, :let es cómo defines o actualizas una variable. Acostumbrarse a él.

19

1.!exists("*s:SetVals"), por eso su es una Starmark antes s :?

El asterisco es una sintaxis especial para la función existente, y significa que estamos comprobando si hay una función existente llamada SetVals. La opción iskeyword se pudo comprobar con exists("&iskeyword") y el comando echo ex con exists(":echo")

Ver :h exists(

2.function!, por qué hay una! ¿personaje?

El signo de exclamación significa que la función debe sustituirse si ya existe.

Ver :h user-functions

3.&iskeyword, es esta una variable, en caso afirmativo, si se define?

Esa es una opción de vim. Puede comprobar si está configurado con :set iskeyword?

4. lo que es s: y g:, ¿cuál es la diferencia entre ellos?

Define el alcance del siguiente símbolo. s: significa que el símbolo es local para el script, mientras que g: significa que el símbolo será global.

Ver :h internal-variables y para ver s::h script-variable

5. qué let se debe usar? como let &dictionary = g:pydiction_location, can i change it to be &dictionary = g:pydiction_location?

Vimscript es uno de los idiomas que requieren que las variables se declaren con una palabra clave. No creo que haya una forma de declarar las variables más fácilmente que con let.

+1

4 .: "definir el alcance" es verdadero, "el símbolo solo se puede usar en el script actual" es falso: hay 's:' - el diccionario de alcance - y puede pasarlo a otro lugar para otorgar acceso a script-local variables. – ZyX

+1

5 .: no es necesario que las variables se declaren con una palabra clave (ejemplo: 'call extend (g :, {'var': 'val'})' crea la variable g: var, no se usa 'let'), solo hay un solo tipo de instrucciones: un comando que se parece a '[rango] [comando] [!] [argumento [s]] [comentario]' (todos los elementos son opcionales, algunos comandos requieren ausencia de rango, bang) , argumentos o no admiten comentarios tomándolos como parte de argumentos, rango sin comando es "ir a la última línea en rango"), no hay ninguna declaración de "asignación" que OP pida ya que no concuerda con esta sintaxis. – ZyX

+0

Gracias ZyX. Modifiqué la respuesta para corregir los errores. –

Cuestiones relacionadas