2010-07-11 21 views
13

Estoy tratando de obtener VIM para sangrar Javascript con el '=' y los comandos relacionados. Cuando trato de guión automático el siguiente, por ejemplo:Indentación de Javascript en VIM

new function($) { 
    $.fn.setCursorPosition = function(pos) { 
     if ($(this).setSelectionRange) { 
     $(this).setSelectionRange(pos, pos); 
     } else if ($(this).createTextRange) { 
     var range = $(this).createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', pos); 
     range.moveStart('character', pos); 
     range.select(); 
     } 

El resultado es la más absurda:

 new function($) { 
     $.fn.setCursorPosition = function(pos) { 
     if ($(this).setSelectionRange) { 
     $(this).setSelectionRange(pos, pos); 
     } else if ($(this).createTextRange) { 
     var range = $(this).createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', pos); 
     range.moveStart('character', pos); 
     range.select(); 
     } 

he fijado set syntax=javascript, y me he fijado filetype a:

filetype detection:ON plugin:ON indent:ON 

Aunque he probado cada permutación de esto. He intentado cada permutación de smartindent, autoindent y cindent, pero nada parece tener el efecto correcto de darle a Vim la indentación esperada. Establecí tabstop=4.

He instalado javascript.vim y IndentAnything, aunque no parecen tener ningún efecto.

Estaría muy agradecido por cualquier sugerencia sobre cómo obtener sangrado de Vim correctamente en JavaScript.

+1

Nota al margen: la instalación de javascript.vim y de IndentAnything me resolvió un problema donde vim solo estaba sangrando algunas de las líneas correctamente. – Wulfhart

Respuesta

4

Al agregar las dos llaves de cierre y seleccionar todo el bloque con vi{ se proporcionó la sangría automática adecuada para mí en gvim 7.2 sin complementos. Es posible que desee ver si un plugin errante lo está arruinando al iniciar vim con el indicador --noplugins en la línea de comando. e intenta de nuevo.

3

Odio decir algo inútil como "Funciona para mí", pero lo hace. Incluso sin nada en mi .vimrc y todos los complementos desactivados, obtengo la sangría correcta.

new function($) { 
    $.fn.setCursorPosition = function(pos) { 
     if ($(this).setSelectionRange) { 
      $(this).setSelectionRange(pos, pos); 
     } else if ($(this).createTextRange) { 
      var range = $(this).createTextRange(); 
      range.collapse(true); 
      range.moveEnd('character', pos); 
      range.moveStart('character', pos); 
      range.select(); 
     } 

Ha intentado cargar vim con el interruptor --noplugins y desplazar temporalmente/cambiar el nombre de su .vimrc a ver si todavía no funciona? Sospecho que otra configuración en tu .vimrc u otro complemento puede estar causando el conflicto.

3

Para mí funciona (declaración no muy útil, lo sé ;-)). Supongo que el tipo de archivo no se detecta correctamente.

¿Qué

:set filetype 

dicen? Debería informar "javascript".

[EDITAR] Sugerencia: tenga en cuenta que hay una opción llamada 'tipo de archivo' y un comando llamado: tipo de archivo. Para obtener ayuda sobre la opción, haga lo siguiente: help 'filetype' para el comando do: help: filetype.

+0

@Habi: Gracias. Sería una pena no haberlo notado, pero alas ': set filetype' es' javascript'. :) –

+0

@Brian M. Hunt: Hmmm, tal vez la sangría es 0 (no sé si esto es posible en absoluto, pero si es posible podría ser una razón para su problema). ¿Qué significa ": establecer ancho de cambio" y ": establecer cindos" decir? – Habi

+0

@Habi: ': establecer desplazamiento de ancho' es' shiftwidth = 4' y 'establecer cino ptions' es 'cinoptions ='. hrmm. –

3

estaba teniendo problemas el otro día con MacVim 7.2 y un archivo de Lua que no sangría correctamente - incluso después de usar set syntax, set filetype y filetype indent on, no se sangría el archivo correctamente.

descubrí añadiendo:

filetype plugin indent on 

a mi archivo .gvimrc resuelto el problema, al menos para mí. YMMV.

+0

Gracias por la respuesta y contenta usted resolvió esto. Desafortunadamente esto no pareció ayudar. –

9

Oh hombre, acabo de pasar un par de horas tratando de resolver el mismo problema.

Si tiene filetype indent on (lo que hace), entonces un archivo podría establecer algunas configuraciones de sangría diferentes en alguna parte. Si utiliza verbose set <option>? se puede ver dónde se está estableciendo y lo que está establecido en:

:verbose set autoindent? 
:verbose set cindent? 
:verbose set smartindent? 
:verbose set indentexpr? 

Por defecto, sólo se esperaría ver cindent establecido por el archivo de guión predeterminado:

cindent 
Last set from $VIMRUNTIME/indent/javascript.vim 

Dónde $VIMRUNTIME es la ruta que obtiene cuando ejecuta :echo $VIMRUNTIME.

Todos los demás no se establecerán a menos que los habilite (en su vimrc o un complemento).

Para mí, tuve un plugin (eclim) que estaba poniendo identexpr y causando este problema:

identexpr=EclimGetJavascriptIndent(V:lnum) 
Last set from ~/.vim/bundle/eclim/indent/javascript.vim 
+0

¡Gracias por esto! También me ayudó a localizar un plugin buggy.:) – imiric

+1

Wow, gracias. Acabas de ayudarme a depurar un vim inexplicablemente roto. No sería autoindent en los archivos JS. Resultó ser un paquete en '.vim/bundle/vim-jsx' (que simplemente tuve que eliminar, ya que acabo de cambiar a https://github.com/othree/yajs.vim de todos modos). Gracias. Quiero comprarte una cerveza, si la oportunidad se presenta alguna vez. –

4

tuve el mismo problema hace algún tiempo y la solución fue el plug-in "vim-javascript". Es un paquete de JavaScript para vim que proporciona sintaxis y complementos de sangrado.

https://github.com/pangloss/vim-javascript

La instalación es muy simple.

Si está utilizando pathogen, utilice los pasos del siguiente:

cd ~/.vim/bundle 
    git clone https://github.com/pangloss/vim-javascript.git 

Si está utilizando vundle utilizar los pasos del siguiente:

Añadir la línea de seguimiento a su archivo vimrc:

Plugin "pangloss/vim-javascript" 

E instálelo:

:so ~/.vimrc 
:PluginInstall 
0

Para mí, la presencia de más de un '(' carácter antes del carácter '{' en la misma línea parecía cambiar el algoritmo de sangría utilizado por '='. Quitando uno de los '(' parecía arreglar '=' para todas las partes del archivo excepto otras regiones de alcance '{...}' que también tenían múltiples '(' en la línea de apertura.

Estoy usando vim 7.4 en lubuntu

Cuestiones relacionadas