Отступ Javascript в VIM
Я пытаюсь получить VIM с отступом Javascript с '=' и связанными с ним командами. Когда я пытаюсь сделать автоматический отступ, например:
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();
}
Результат довольно абсурден:
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();
}
Я установил set syntax=javascript
, и я установил filetype
в:
filetype detection:ON plugin:ON indent:ON
Хотя я пробовал каждую перестановку этого. Я пробовал каждую перестановку smartindent
, autoindent
и cindent
, но ничто, кажется, не имеет правильного эффекта от предоставления Vim ожидаемого отступа. Я установил tabstop=4
.
Я установил javascript.vim
и IndentAnything
, хотя они, похоже, не имеют никакого эффекта.
Я был бы очень благодарен за любые предложения относительно того, как получить Vim, отступающий должным образом в JavaScript.
Ответы
Ответ 1
О, человек, я просто потратил пару часов, выяснив ту же проблему.
Если у вас есть filetype indent on
(что вы делаете), то где-то в файле может быть задано несколько разных параметров отступов. Если вы используете verbose set <option>?
, вы можете увидеть, где он установлен и на что он установлен:
:verbose set autoindent?
:verbose set cindent?
:verbose set smartindent?
:verbose set indentexpr?
По умолчанию вы ожидаете увидеть только cindent
, заданный файлом отступа по умолчанию:
cindent
Last set from $VIMRUNTIME/indent/javascript.vim
Где $VIMRUNTIME
- путь, который вы получаете при запуске :echo $VIMRUNTIME
.
Все остальные не будут установлены, если вы не включите их (в вашем vimrc или плагине).
Для меня у меня был плагин (eclim), который устанавливал identexpr
и вызывал эту проблему:
identexpr=EclimGetJavascriptIndent(V:lnum)
Last set from ~/.vim/bundle/eclim/indent/javascript.vim
Ответ 2
Добавление двух закрывающих фигурных скобок и выбор всего блока с помощью vi{
обеспечит правильный автоматический отступ для меня в gvim 7.2 без плагинов. Возможно, вам захочется узнать, запутан ли ошибочный плагин, запустив vim с флагом --noplugins
в командной строке. и повторите попытку.
Ответ 3
У меня была такая же проблема некоторое время назад, и решение было плагином "vim-javascript". Это пакет JavaScript для vim, предоставляющий плагины синтаксиса и отступа.
https://github.com/pangloss/vim-javascript
Установка очень проста.
Если вы используете pathogen, выполните следующие действия:
cd ~/.vim/bundle
git clone https://github.com/pangloss/vim-javascript.git
Если вы используете vundle, используйте следующие шаги:
Добавьте следующую строку в файл vimrc:
Plugin "pangloss/vim-javascript"
И установите его:
:so ~/.vimrc
:PluginInstall
Ответ 4
Я ненавижу говорить что-то бесполезное, как "Это работает для меня", но это так. Даже с отсутствием в моем .vimrc и всех плагинах я получаю правильный отступ.
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();
}
Вы пытались загрузить vim с помощью переключателя --noplugins
и временно переместить/переименовать свой .vimrc, чтобы убедиться, что он все еще не работает? Я подозреваю, что другой параметр в вашем .vimrc или другом плагине может вызвать конфликт.
Ответ 5
Для меня это работает (не очень полезное утверждение, я знаю;-)).
Я полагаю, что тип файла не обнаружен правильно.
Что делает
:set filetype
говорят? Он должен сообщать "javascript".
[EDIT]
Подсказка: обратите внимание, что есть опция "filetype" и команда под названием filetype.
Чтобы получить справку по опции, выполните: help 'filetype' для команды do: help: filetype.
Ответ 6
У меня были проблемы на днях с MacVim 7.2 и Lua файлом, который не был бы отступом правильно - даже после использования set syntax
, set filetype
и filetype indent on
он не отступал от файла правильно.
Я обнаружил добавление:
filetype plugin indent on
в мой файл .gvimrc
решил проблему, по крайней мере, для меня. YMMV.
Ответ 7
Для меня наличие более одного символа (символ перед символом "{" в той же строке, казалось, изменило алгоритм отступа, используемый "=". Удаление одного из "(" казалось, исправить "= для всех частей файла, кроме других областей областей" {...}", которые также имели несколько "(" в строке открытия.
Я использую vim 7.4 в lubuntu