首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在VimL中调试问题?

如何在VimL中调试问题?
EN

Stack Overflow用户
提问于 2014-02-14 05:30:45
回答 3查看 951关注 0票数 3

我想了解更多关于在vim中调试的知识。vim有哪些功能可以帮助我诊断出我可能遇到的问题?

我基本上想知道:

  • 如何诊断.vimrc和其他配置文件的问题?
  • 在VimL中调试脚本的策略是什么?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-14 05:30:45

如何诊断.vimrc和其他配置文件的问题?

如果您在vim中有一些意想不到的行为,并且不确定问题的根源是什么,那么有几种方法可以解决问题的根源。最好的第一步是找出您的问题是正常的vim行为,是由插件引起的还是由您的.vimrc引起的。

如果您的vim实例正在设置一个特定的'option',并且您不确定在哪里设置它。您可以使用:verbose命令查找答案。例如

代码语言:javascript
复制
:verbose set nocompatible?
nocompatible
     Last set from ~/.vimrc

在没有任何插件或配置文件的情况下运行vim实例

代码语言:javascript
复制
vim -N -u NONE

我在我的cleanvim文件中将其设置为名为.bashrc的别名。-u NONE就是这里的魔力所在。-N简单地将vim转换为nocompatible模式,这通常是需要的。您还可以使用选项NORC只排除您的vimrc。请注意,如果您使用病原体或vundle从您的vimrc内实例化您的插件,那么您的插件也将无法正确加载。

如果您使用的插件管理器,如病原体或vundle,那么排除您的插件很简单,只需注释掉您的.vimrc中调用病原体或vundle的行。但是,如果从.vim目录中加载了其他插件,则可以使用--noplugin标志排除它们。

如果您的问题是由一个插件引起的,试着一个一个地添加回插件,以确定是哪个插件导致了问题。在那里,您可以向插件的维护人员报告错误,也可以使用这个答案的其他提示来自己诊断问题。

如果您的问题是由您的.vimrc引起的,那么有一些方法可以进一步解决这个问题。一种简单的方法是在您的finish中的某个点添加.vimrc命令。一旦遇到这个命令,脚本就会停止来源,并且在它执行之后没有任何命令。通过这种方式,您可以排除.vimrc的大部分内容,并试图找出问题来源的一般区域。

在VimL中调试脚本的策略是什么?

Vim在:h debug-scripts上有一个关于这个主题的帮助部分。这将详细描述vim的调试模式,它将允许您设置断点并逐步遍历源文件或用户函数。可以在特定函数或文件中的特定行上添加断点。比如说..。

代码语言:javascript
复制
" 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标志启动vim。还可以在特定命令上运行调试模式。例如,假设您遇到了特定命令:MyCommand的问题。您可以使用:debug MyCommand在此命令上启动调试模式。

一旦启动了调试模式,就可以使用通常的vim命令集。这很有用,因为您现在可以使用echo命令检查变量的值,以尝试诊断问题。您还可以使用verbose选项提供有关以下行的额外信息。有关选项,请参见:h 'verbose'

票数 5
EN

Stack Overflow用户

发布于 2014-02-14 11:43:21

编剧对调试vimL非常有帮助:

  • 为更容易插入Vim断点提供命令
  • :Runtime允许简单地重新加载插件,甚至包括保护程序。
  • :Disarm {file}:试图通过删除运行时文件的映射、命令和自动and来禁用运行时文件
  • :Time {command}:侧写
  • :Verbose {command}:类似于:verbose,但是将结果捕获到文件并将其加载到预览窗口

对于需要多次重新启动Vim (例如:增量删除插件)的情况,会话插件会话插件命令可能很有用。

票数 3
EN

Stack Overflow用户

发布于 2014-02-14 10:48:58

对于vimL,我觉得这两个插件很棒:

  • BreakPts 可视化设置/查看Vim断点和浏览函数
  • 德霍 适合调试脚本的更好的回波功能

我还使用它快速获取所选的vimL行:

代码语言:javascript
复制
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>``
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21771522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档