我在Vim中遇到问题,我认为它可能存在于我的vimrc文件中(或者被告知可能是我的vimrc文件)。如果这是我的vimrc文件,我怎么知道问题出在哪里?

#1 楼

首先,要使用默认设置启动Vim:

vim -u NONE -U NONE -N


-u NONE阻止Vim加载vimrc,-U NONE阻止Vim从
加载gvimrc,然后-N告诉Vim使用不兼容模式(不是必需的,但是大多数Vim用户不习惯于“兼容”模式)。

在Windows中,您可以通过创建一个新的快捷方式1添加这些标志。如果您的问题消失了,那是您的问题是由您的vimrc文件中的某物引起的。 !去问你的问题。请确保提到您尝试在没有vimrc文件的情况下启动Vim


所以这是我的vimrc,现在怎么办?

如果您还没有的话,您会可能要先保存vimrc文件的备份副本。插件可以
在Vim中改变很多。如果这解决了问题,请尝试通过逐个重新启用
来找出哪个插件。在确定哪个
插件完全导致了问题之后,可以通过阅读此插件的
文档和/或询问带有NONE标签的问题来尝试并修复它。 />如果它不是插件,并且您不知道是什么导致了您的问题,那么这是一个反复试验的过程。注释掉您的vimrc中的一行或多行,启动Vim,检查是否出现问题,然后重复此过程
,直到问题不再发生为止。最快的方法是:


注释(或删除)大约一半的vimrc文件。
重新启动Vim或打开新的Vim(不重新加载vimrc足够好,因为
设置尚未设置)。
问题现在消失了吗?放回移除的零件(保留Vim
打开并在其中使用撤消非常有用),然后对添加的零件重复步骤1。
问题仍然存在吗?转到第1步。

最后,您应该只有一个选项或几个选项的组合
,这会引起问题。您可以通过以下方法在Vim中找到有关任何选项的更多信息: />如果忽略它们,您最终将进入错误的页面。

如果在阅读帮助页面后仍感到困惑,您知道在哪里提出问题
;-)

调试单个插件

如果您想隔离单个插件,也许要问一个问题,则希望尽可能少地加载,但仍然可以加载插件;您可以通过Vim的软件包
功能轻松地做到这一点。这需要Vim 8或Neovim的较新版本。在此示例中,我们将使用plugin-<name>路径。
现在将插件放在常规~/plugin目录中。对于
示例:

:help 'option_name'



创建具有以下内容的pack/plugins/start/$name文件;这将确保
Vim将从test-vimrc目录而不是~/plugin
目录中加载插件: :

git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go


现在,只有一个插件就拥有最小的vimrc。



脚注

1例如:在64位Windows上,快捷方式如下所示:~/.vim。要创建它,请在想要快捷方式的文件资源管理器中右键单击,然后选择“新建”->“快捷方式”并粘贴快捷方式文本。如果您的Vim安装在其他位置,则可能需要更改Vim路径。

评论


该技术称为二进制搜索故障定位。

–tommcdo
2015年2月19日在23:53

在弄清了自己的错误之后,这将是个绝佳的时机,开始将.vimrc保持在版本控制之下:)几乎总是您对它进行的最后更改之一,使内容的行为异常。

–escrafford
15年6月17日在21:02

如果您具有-u NONE,则不需要-U NONE。

– Antony
16年7月4日在7:59

谢谢@jpaugh;我认为该顺序更有意义。

–马丁·图尔诺伊(Martin Tournoij)
18-09-19在11:48

对于许多情况,我都更喜欢vim --clean。除了易于键入之外,它还等效于-u DEFAULTS -U NONE -i NONE以及其他一些内容,例如从$ RUNTIMEPATH中排除$ HOME。 -u DEFAULTS使用defaults.vim作为vimrc ...这意味着在调试时Vim实际上是可用的。

– B层
19年7月8日在11:39



#2 楼

有一个专门用于调试的-D Vim参数,在执行脚本中的第一个命令后,它将进入调试模式。

例如要在没有任何插件的调试模式下运行Vim,请运行:

vim --noplugin -D


键入n / next来解析下一行并继续按Enter。 />然后contq返回vim界面。

如果使用的是GUI版本,请在vimrc中放置gui命令以在该命令之后立即开始调试。

按Ctrl + d获取可用命令列表

更多信息:



在Vim提示Wiki上调试意外的选项设置
/> :help debug-scripts


评论


这对于在导致错误消息的.vimrc文件中查找一个简单错误最有帮助。值得一试,因为它很快就可以完成。

– RichVel
16年7月21日在17:09



@kenorb这个命令真是棒极了,让我不必再去其他编辑器了。

–TheLazyChap
16年11月22日在14:23

#3 楼

如前所述,首先尝试vim -u NONE -U NONE -N以确保您的香草vim正常运行。

然后正常启动vim并从内部检查
vim出现问题后,将显示所有警告和错误。

最后,使用以下命令启动vim:称为logfile.log-V9是日志记录级别,请尝试重现您的问题。

#4 楼

另一个提示:作为一个穴居人,我确实喜欢在.vimrc中添加:echom“ message”以查看正在执行的内容和未执行的内容。 />
if executable('ag')
  :echom "AG FOUND"

  ...
endif


这可以帮助我快速查看是否正在执行if块等。下次启动vim时,该消息将打印在控制台上。

评论


而且,如果您使用echom,另一个有趣的命令是:messages,以获取回显的消息的完整日志。在启动后查看它们有时会很有用。

–statox♦
16 Mar 4 '16 at 8:43

这几乎是我所需要的,我想在我的vimrc中查看cpoptions的值是什么,如何回显“:set cpoptions”的输出? ?

–迈克·利珀特
18年6月15日在14:26

@MikeLippert,您可以使用echom&cpoptions。交互地,:verbose设置cpoptions?更好一点

– D. Ben Knoble♦
20-10-17在16:19

#5 楼

我发现有帮助的一件事是保留了一组变量,这些变量可以切换.vimrc的各个部分,因此您可以禁用或启用它的某些部分而不必注释掉东西。它也具有令人讨厌的副作用,它迫使您考虑.vimrc的组织。 >
" feature toggles in vimrc
let g:vimrc_feat_pathogen               = 1
let g:vimrc_feat_core_minimal           = 1
let g:vimrc_feat_matchit                = 1
let g:vimrc_feat_options                = 1
let g:vimrc_feat_colors_and_highlight   = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding          = 1
let g:vimrc_feat_autocommand_group      = 1
let g:vimrc_feat_custom_definitions     = 1
let g:vimrc_feat_load_opam              = 1


#6 楼

我的vimrc加载时间非常慢,大约400毫秒,我仅通过删除以下行就将其缩短为20毫秒:这样的命令。

评论


欢迎光临本站!这是一个有用的花絮,但比提出的一般性问题要具体得多。最好将其添加为例如这个问题,或者,如果您只是想分享知识,您也许可以问并回答自己的问题?

–丰富
18-10-3在10:22

#7 楼

这是一个非常简单的入门程序。


注释掉整个.vimrc文件的内容
通过运行:source %:so $MYVIMRC
< br取消注释文件的离散部分(通常从顶部开始)
重复步骤2和3,直到找到错误为止。
修复错误。


评论


如果正确使用大写和标点符号,此答案可能会好得多。

–user579
18年9月12日在6:31

强烈建议您执行二进制搜索。

– D. Ben Knoble♦
19年2月27日在18:03