用vim脚本,
让我说我想从下面的表达式中找到"This"这个词
match("testingThis", '\ving(.*)')
我尝试了一些不同的选项,getmatches(),substitute(),不是运气还:(
有没有办法在vim中获得匹配,如ruby或php,即 matches[1]
- - - - - - - - - - - - - 编辑 - - - - - - - - - - - - -----
来自h function-list,glts如上所述,我发现matchlist()
不同matchstr(),它总是返回完整匹配,如匹配[0],它返回完整的匹配数组.
echo matchstr("foo bar foo", '\vfoo (.*) foo') " return foo bar foo
echo matchlist("foo bar foo", '\vfoo (.*) foo') " returns ['foo bar foo', 'bar', '', '', '', '', '', '', '', …Run Code Online (Sandbox Code Playgroud) 我正在使用一个名为tComment的vim插件
它允许我按gc或来评论一行<c-_><c-_>
此外,它适用于快捷方式,<c-/><c-/>但visual selection丢失了.
所以,我尝试过:
<c-/>我的尝试:
inoremap <c-/> gc
vnoremap <c-/> gc gv
nnoremap <c-/> gc
Run Code Online (Sandbox Code Playgroud)
=========
imap <c-/> gc
vmap <c-/> gc gv
nmap <c-/> gc
Run Code Online (Sandbox Code Playgroud)
=========
imap <c-/> gc$
vmap <c-/> gc$ gv
nmap <c-/> gc$
Run Code Online (Sandbox Code Playgroud)
=========
inoremap <c-/> <c-_><c-_>
vnoremap <c-/> <c-_><c-_> gv
nnoremap <c-/> <c-_><c-_>
Run Code Online (Sandbox Code Playgroud)
=========
imap <c-/> <c-_><c-_>
vmap <c-/> <c-_><c-_> gv
nmap <c-/> <c-_><c-_>
Run Code Online (Sandbox Code Playgroud)
(以上情况似乎不起作用)
注意:
我正在修改已安装的VIM插件,而在另一个终端选项卡中,我正在测试结果.每次我想测试更改时我都要重新启动VIM.
有没有更快的方法来完成这个过程?如何在VIM启动后重新加载VIM插件?
该插件通过Vundle安装
我试图运行:so %应该重新加载.vimrc文件,但我仍然看不到我的更改.
我使用一些自动命令在我的vim设置InsertLeave和BufReadPost事件中突出显示无关的空白.我最近开始使用插件来突出显示缩进(https://github.com/nathanaelkane/vim-indent-guides)
问题是如果有一个带缩进的空行,它会被indent-guides插件突出显示,但不会被我的auto命令突出显示.我想要做的是在插件中添加一个自定义事件,这样当完成突出显示时,我可以将自动命令设置为触发并覆盖突出显示的情况.
例如,这是我想要的流程类型(或至少类似的东西):
indent-guides plugin activates
indent-guides plugin highlights all indentation
indent-guides plugin triggers custom event signaling it is done
indent-guides plugin exits
auto command whitespace highlighter is triggered by indent-guides completion event
Run Code Online (Sandbox Code Playgroud)
以下是我用于空格突出显示的自动命令:
autocmd InsertEnter * syn clear EOLWS | syn match EOLWS excludenl /\s\+\%#\@!$/
autocmd InsertLeave,BufReadPost * syn clear EOLWS | syn match EOLWS excludenl /\s\+$/
Run Code Online (Sandbox Code Playgroud)
编辑:
我用另一种方式解决了这个问题(通过编辑不同的插件).这仍然没有回答这个具体问题,因此我不会将其作为解决方案发布.
我作为插件解决问题的方法:https://github.com/ntpeters/vim-better-whitespace
我很长一段时间都在为Vim阅读Shougo的"Unite"插件,所以我最终决定尝试一下.如果您还不熟悉:
一个功能是递归搜索文件/文件夹以搜索某些内容的功能.通常你会这样做:" Unite file_rec/async ".这通常会在当前工作目录中开始搜索(在我的情况下,我正在处理的当前文件所在的目录).我在一个非常大的代码库中工作; 将近100万个文件分散在一个经常荒谬的文件中,有时会将源文件,二进制文件和文本文件混合在一起.这意味着使用默认的unite文件太慢了,即使我正在使用vimproc插件运行异步.我对这个问题(在unite之外)的旧解决方案是运行一个夜间脚本,它将构建每个单独的".cpp"和".h"文件的列表,将它们的绝对路径吐出到一个巨大的文件中,然后我会grep该文件在项目中的事物之间跳转.看起来相当合理,但我想知道是否有更好的方法.
我觉得我只是在谈论Unite提供的可能性,而且我认为必须有一些聪明的方法来使用这个插件来完成类似的事情.它已经支持引用vim的":ol"命令,它列出了你最近使用过的文件,所以我想即使只是直接用unite引用我的所有项目源/头文件的glob也是一个好的开始.是否有任何联合专家解决了这个问题?我甚至喜欢听到其他人的解决方案,以便快速访问类似于我的大型项目中的所有可用源文件?我工作的大多数人只使用Visual-Studios,其中包含您需要的所有内容的".sln"文件...也许我可以劫持/导入它?
是否有一个好的命令可以切换到进行编辑的最后一个缓冲区(和位置)?我宁愿不必为此安装插件(但如果没有其他方法,那么我会这样做)。
这不是由 BufSurf 插件解决的,它实际上可以追溯到导航历史,这是对听起来相似的问题的答案。
我想在vim编辑器中具有以下功能。
vim或这样的vimscript中是否已经有这样的功能?
我使用cscope命令:cs find s someFunction,我看到具有此功能外观的长列表,我发现我对列表感兴趣并打开它,vim在新窗口中打开文件,我想在新选项卡中打开文件.
我发现了几个类似的问题,但他们没有帮助.例如:
我如何从cscope标签列表中打开新标签页
很容易使用 vimscript 来确定文件名是否通过使用argc(). 有没有办法确定是否-给了标志以指定给 vim 的管道输入?它不将管道输入计为文件名并且argc()为空。
编辑
感谢下面精彩的接受答案,如果没有文件名并且没有使用stndin ,我有办法打开NerdTree 。
let wmuse_nt = 0
autocmd StdinReadPost * let wmuse_nt = 1
autocmd vimenter * if !argc() && wmuse_nt == 0 | NERDTree | endif
Run Code Online (Sandbox Code Playgroud) 我跳到同事的电脑上,尝试在 vim 中打开一个 C++ 文件,并得到以下错误 -
E484: Can't open file /usr/local/share/vim/syntax/syntax.vim
Run Code Online (Sandbox Code Playgroud)
有趣的是,该位置/usr/local/share/vim/甚至不存在。看起来vim安装在/usr/share/vim
我尝试破解 ~/.vimrc,但我认为 ~/.vimrc 很好,因为我 ssh 进入另一台机器,vim 能够在那里进行语法高亮显示。
这是在 debian 7 上。另外,有趣的是,当我env从 tcsh 执行时,我没有看到那里列出了 VIMRUNTIME。
有什么建议?