我正在尝试让 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
,虽然它们似乎没有任何效果。
如果有任何有关如何在 JavaScript 中正确缩进 Vim 的建议,我将不胜感激。
天哪,我刚刚花了几个小时解决同样的问题。
如果您有
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
我前段时间遇到了同样的问题,解决方案是插件“vim-javascript”。它是 vim 的 JavaScript 包,提供语法和缩进插件。
https://github.com/pangloss/vim-javascript
安装非常简单。
如果您正在使用病原体,请使用以下步骤:
cd ~/.vim/bundle
git clone https://github.com/pangloss/vim-javascript.git
如果您使用vundle,请使用以下步骤:
将以下行添加到您的 vimrc 文件中:
Plugin "pangloss/vim-javascript"
并安装它:
:so ~/.vimrc
:PluginInstall
添加两个右大括号并使用
vi{
选择整个块在没有插件的 gvim 7.2 中为我提供了正确的自动缩进。您可能想通过在命令行上使用 --noplugins
标志启动 vim 来查看是否有错误的插件搞砸了。然后再试一次。
我讨厌说“这对我有用”这样无益的话,但确实如此。即使我的 .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();
}
您是否尝试过使用
--noplugins
开关加载 vim 并暂时移动/重命名您的 .vimrc 以查看它是否仍然不起作用?我怀疑您的 .vimrc 或其他插件中的另一个设置可能会导致冲突。
对我来说它有效(这不是很有帮助的陈述,我知道;-))。 我认为文件类型未正确检测。
有什么作用
:set filetype
说?它应该报告“javascript”。
[编辑] 提示:请注意,有一个名为“filetype”的选项和一个名为:filetype 的命令。 要获取选项 do :help 'filetype' 的帮助,请执行命令 do :help :filetype。
前几天我在使用 MacVim 7.2 和 Lua 文件时遇到了问题,该文件无法正确缩进 - 即使在使用
set syntax
、set filetype
和 filetype indent on
后,它也无法正确缩进文件。
我发现添加:
filetype plugin indent on
我的
.gvimrc
文件解决了这个问题,至少对我来说是这样。 YMMV.
对我来说,同一行中“{”字符之前存在多个“(”字符似乎改变了“=”使用的缩进算法。删除其中一个“(”似乎可以修复所有“=”文件的其他部分,除了其他作用域区域“{...}”,其开头行上也有多个“(”。
我在 lubuntu 中使用 vim 7.4
如果你想在不使用任何插件的情况下缩进。
gg=G
它的作用是:
gg
将光标移动到文件顶部,=
将触发自动缩进,G
将光标移动到文件末尾。