web-dev-qa-db-fra.com

Comment corriger une indentation Javascript inline incorrecte dans Vim?

Je n'arrive pas à insérer correctement le Javascript en ligne dans Vim. Considérer ce qui suit:

  $(document).ready(function() {

  // Closing brace correctly indented
    $("input").focus(function() {
      $(this).closest("li").addClass("cur-focus");
    }); // <-- I had to manually unindent this

  // Closing brace incorrectly indented
    $("input").blur(function() {
      $(this).closest("li").removeClass("cur-focus");
      }); // <-- This is what it does by default. Argh!

  });

Vim semble insister pour indenter automatiquement l'index de fermeture montré dans le deuxième cas. Il en va de même si je réindente tout le fichier. Comment l'obtenir à indenter automatiquement en utilisant le style d'indentation JS plus standard vu dans le premier cas?

63
Charles Roper

Utiliser JavaScript Indent: Javascript indenter (le retrait HTML est inclus) par Preston Koprivica. Merci pour le heads-up de oligofren - donnez-lui un vote positif.

81
Charles Roper

Le script d'indentation Javascript le plus complet et sans bogue est celui de Preston KoprivicaLe script appelé OOP qui se trouve dans la réponse proposée présente de graves bugs et n'indente pas correctement le code qui est placé entre crochets.

85
oligofren

Les scripts mentionnés ci-dessus ne formatent pas correctement la syntaxe de fermeture souvent utilisée dans jQuery:

$(function() {
  // only one level of indentation, not two
});

Ce script fonctionne mieux pour moi: http://www.vim.org/scripts/script.php?script_id=2765

17
Kristian Hanekamp

La plupart de ces réponses datent de 2009 et, franchement, sont périmées.

vim-javascript est beaucoup plus récent et à jour que le script de Preston.

L'installation est un peu plus compliquée si vous n'avez pas encore commencé à utiliser Vundle , mais cela ne semble pas souffrir des problèmes liés aux alternatives.

10
Cory Klein

peut-être qu'une combinaison de ces paramètres devrait être dans votre fichier VIMRC.

syntax on 
set syn=auto 
set showmatch 
filetype on 
filetype plugin on 
filetype indent on 
set tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set expandtab
7
m42

J'ai eu le même problème. C'est le meilleur de tous les scripts d'indentation Javascript:

http://www.vim.org/scripts/script.php?script_id=1840

Il nécessite le plugin IndentAnything

http://www.vim.org/scripts/script.php?script_id=1839

En prime, j’ai écrit ce script de retrait qui rendra les blocs Javascript assez jolis. Il utilise le pénétrateur html par défaut (et celui IndentAnything dans un bloc Javascript)

http://Gist.github.com/371902

3
mikelikespie

Au cas où quelqu'un viendrait ici, veuillez noter le vim-javascript par pangloss à https://github.com/pangloss/vim-javascript m'a aidé jusqu'à présent, c'est-à-dire Vim 7.4. Et les solutions ci-dessus d'Oligo et de Charles Roper ne l'ont pas été. 

2
Artyom

En supposant que le fichier de syntaxe comporte un bon retrait pour le script Java, mettez en évidence le bloc visuellement et appuyez sur =. Cela fonctionne pour Java alors je m'attendrais à ce qu'il fasse quelque chose de décent pour le script Java. Les résultats dépendent probablement aussi des paramètres de tabstop, expandtab et peut-être shiftwidth.

gq est utile aussi, il met en forme les lignes plutôt que de les mettre en retrait.

0
Peter

Vous n'avez pas à installer de plugins spécialisés pour Javascript, vous pouvez apprendre les options Vim intégrées pour l'indentation. Vim a pas mal d'options, et certains des styles de retrait tels que cindent, smartindent et indentexpr ont des options qui leur sont propres.

Pour vérifier si vous utilisez cindent ou smartindent ou indentexpr, exécutez:

:set cindent?
:set smartindent?
:set indentexpr?

Malgré son nom, cindent ne s’applique pas uniquement aux programmes C, il peut s’appliquer à plusieurs langages de programmation qui partagent à peu près la même syntaxe, y compris Javascript. Regardez :help C-indenting pour plus de documentation à ce sujet. Vous pouvez ajuster les paramètres en particulier avec une ligne comme celle-ci, voir :help 'cinoptions' et :help cinoptions-values . Voici un exemple de configuration:

:au FileType js,javascript setlocal shiftwidth=2 softtabstop=2 cinoptions=j1,J1,(1s " see help cino-j cino-J cino-(
0
Flimm