我想了解更多有关vim调试的信息。 vim有哪些功能可以帮助我诊断出我可能遇到的问题?
我基本上想知道:
.vimrc
和其他配置文件的问题?答案 0 :(得分:4)
如果你在vim中有一些意想不到的行为,你不确定在哪里
问题是起源的,有一些方法可以在源头上进行珩磨
这个问题。最好的第一步之一是找出问题所在
正常的vim行为,由插件引起或由.vimrc
引起。
如果您的vim实例正在设置特定的'option'
而您不确定
它被设置的地方。您可以使用:verbose
命令查找。对于
实例
:verbose set nocompatible?
nocompatible
Last set from ~/.vimrc
运行没有任何插件或配置文件的vim实例
vim -N -u NONE
我在我的cleanvim
文件中将其设置为名为.bashrc
的别名。 -u NONE
是。{
这里有什么魔力呢。 -N
只是将vim置于nocompatible
模式,
这通常是期望的。您也可以使用NORC
选项仅排除
你的vimrc。请注意,如果你使用像病原体或vundle这样的东西
从你的vimrc中实例化你的插件,然后你的插件也会
没有正确加载。
如果你使用像病原体或vundle这样的插件管理器,那么排除你的
插件很简单;只需在.vimrc
调用中注明该行
病原体或vundle。但是,如果您从.vim
加载了其他插件
您可以使用--noplugin
标记排除它们的目录。
如果您的问题是由插件引起的,请尝试逐个添加插件 确定哪一个导致问题。从那里你可以报告 插件的维护者的错误或尝试自己诊断问题 使用本答案其余部分的提示。
如果您的问题是由.vimrc
引起的,那么有一些方法可以继续使用
进一步的问题。一旦简单的方法是在某些地方添加finish
命令
指向.vimrc
。遇到此命令后,脚本将停止
被采购并且在执行之后没有命令。这样你就可以
排除.vimrc
的大部分内容并尝试找出一般区域
问题来自何处。
Vim在:h debug-scripts
处有关于此主题的帮助部分。这描述了
详细介绍了vim的调试模式,它允许您设置断点和步骤
通过源文件或用户功能。您可以在特定的位置添加断点
功能或文件中的特定行。例如......
" set a breakpoint on the function MyCoolFunc
:breakadd func MyCoolFunc
" set a breakpoint on line 43 of your .vimrc
:breakadd file 43 .vimrc
" set a breakpoint at this location
:breakadd here
设置断点后,您可以再次获取文件以开始调试模式
那条线。如果您想在整个文件上使用调试模式,请使用
-D
标志。您还可以在特定命令上运行调试模式。例如,
说你在使用特定命令:MyCommand
时遇到问题。你可以开始了
使用:debug MyCommand
对此命令进行调试模式。
启动调试模式后,您可以使用常用的vim命令集。
这很有用,因为您现在可以使用。来检查变量的值
echo
命令尝试和诊断问题。您也可以使用verbose
选项以提供有关以下行的额外信息。见:h 'verbose'
对于它的选择。
答案 1 :(得分:3)
The scriptease对调试vimL很有帮助:
:Runtime
可以轻松重新加载插件,甚至可以卸载包括警卫:Disarm {file}
:尝试通过删除映射,命令和autocmds来禁用运行时文件:Time {command}
:profilling :Verbose {command}
:与:verbose
类似,但会将结果捕获到文件并将其加载到预览窗口中对于需要多次重启Vim的情况(例如:增量删除插件),session plugin的:RestartVim
命令可能很有用。
答案 2 :(得分:1)
对于vimL,我发现这两个插件很棒:
设置/查看Vim断点并直观浏览功能
Decho
适用于调试脚本的更好的回声功能
我也使用它来快速获取所选的vimL行:
fu! SourceRange() range
let tmpsofile = tempname()
call writefile(getline(a:firstline, a:lastline), l:tmpsofile)
execute "source " . l:tmpsofile
call delete(l:tmpsofile)
let n = a:lastline - a:firstline + 1
echo 'Sourced ' . n . ' line' . (n > 1 ? 's' : '')
endf
com! -range Source <line1>,<line2>call SourceRange()
nn gs m`:Source<cr>``
vn gs m`:Source<cr>``