- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
在 vim 中使用 fzf.vim 插件可以进行方便的搜索文件, 源码TAG, GIT 记录等, 最近抽空看了下 BTags 命令在 c, c++ 文件中, 无法显示头文件中的 函数声明 标签问题. 。
比如在头文件中有如下一个函数声明, 使用 BTags 命令是无法显示出这个函数原型的. 。
/*=========================================================================
函 数 名: IMGVideoAlgOpen
功 能: 算法初始化
算法实现: 无
参 数: pvHandle 算法句柄[in]
emIMGAlgType 算法类型[in]
pvOpen 初始化结构体指针[in]
返 回 值: 返回函数调用信息
===========================================================================*/
int IMGVideoAlgOpen(void** pvHandle,
EMIMGAlgType emIMGAlgType,
void* pvOpen);
通过代码定位, 在 ~/.vim/bundle/fzf.vim/autoload/fzf/vim.vim 文件中, 可以看到 BTags 是通过 ctags 生成的标签. 。
" query, [tag commands], [spec (dict)], [fullscreen (bool)]
function! fzf#vim#buffer_tags(query, ...)
...
let sort = has('unix') && !has('win32unix') && executable('sort') ? '| sort -s -k 5' : ''
let tag_cmds = (len(args) > 1 && type(args[0]) != type({})) ? remove(args, 0) : [
\ printf('ctags -f - --sort=yes --excmd=number --language-force=%s %s 2> %s %s', get({ 'cpp': 'c++' }, &filetype, &filetype), escaped, null, sort),
\ printf('ctags -f - --sort=yes --excmd=number %s 2> %s %s', escaped, null, sort)]
...
endfunction
通过在命令行执行 ctags 命令, 确实是没有生成 函数声明 的标签. 。
$ ctags -f - --sort=yes --excmd=number --language-force=c include/VideoAlg.h | grep IMGVideoAlgInit
# output nothing
通过查询 ctags 文档了解到, 每个语言生成标签时, 都有默认的标签类型列表. 可以通过 --kinds-(<LANG>|all)=[+|-](<kinds>|*) 参数去控制, 比如我需要控制 c 语言的生成标签类型, 可以写成这样: --kinds-C=+类型 . 。
具体的标签类型可以通过 ctags --list-kinds-full 进行查看, 如下. 。
$ ctags --list-kinds-full
# output
#LANGUAGE LETTER NAME ENABLED REFONLY NROLES MASTER DESCRIPTION
...
C D macroparam no no 0 C parameters inside macro definitions
C L label no no 0 C goto labels
C d macro yes no 1 C macro definitions
C e enumerator yes no 0 C enumerators (values inside an enumeration)
C f function yes no 0 C function definitions
C g enum yes no 0 C enumeration names
C h header yes yes 2 C included header files
C l local no no 0 C local variables
C m member yes no 0 C struct, and union members
C p prototype no no 0 C function prototypes
C s struct yes no 0 C structure names
C t typedef yes no 0 C typedefs
C u union yes no 0 C union names
C v variable yes no 0 C variable definitions
C x externvar no no 0 C external and forward variable declarations
C z parameter no no 0 C function parameters inside function definitions
...
由上 ENABLED 列可知, 默认 ctags 为 c 语言生成的 tags 是不包含 prototype 的, 如果需要支持生成 prototype, 需要使用参数加上. 。
修改 ~/.vim/bundle/fzf.vim/autoload/fzf/vim.vim 文件, 增加 ctags --kinds-C=+p 参数来支持 prototype 方法签名. 。
\ printf('ctags -f - --sort=yes --kinds-C=+p --excmd=number --language-force=%s %s 2> %s %s', get({ 'cpp': 'c++' }, &filetype, &filetype), escaped, null, sort),
\ printf('ctags -f - --sort=yes --kinds-C=+p --excmd=number %s 2> %s %s', escaped, null, sort)]
搞定收工, 同时也提交了 PR 到 github , 不知道是否会采纳. 。
如果需要其它语言额外的标签类型, 可以基于类似的方法添加.回想了一下 ctag 之所以默认不提供 prototype 类型的标签, 可能是因为一个文件中如果有声明和定义, 可能会有两个相同的标签影响查看. 我这边是做了标签选择预览的, 所以不存在这个问题. 。
最后此篇关于修改ctags让fzf.vim插件显示C,C++方法声明的标签的文章就讲到这里了,如果你想了解更多关于修改ctags让fzf.vim插件显示C,C++方法声明的标签的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这是一个用例:我使用 fzf 搜索目录列表,然后使用 cd 命令: cd $(fzf) 但是,fzf 命令只显示文件,不显示目录。有没有办法指示 fzf 只选择目录? 最佳答案 根据我的评论,您可以使
我正在尝试为 fzf 创建一个命令行这将使我能够轻松地选择并运行我下载的许多实用实用程序(即 appimages)中的一个。 例如此 shell 命令查找我的下载目录中的所有可执行文件: find ~
当我使用 :Files在 fzf.vim 中,它搜索当前目录和子目录中的文件。当前工作目录是固定的。在下面的屏幕截图中,它是浅蓝色的。有没有办法动态更改运行 FZF 的工作目录?例如,如果我只是删除“
如何为 fzf.vimp 弹出窗口保持与终端相同的颜色?最新的更新使用 g:fzf_colors 将其更改为当前的 Vim 主题。我尝试将其设置为“”,也尝试将颜色规范更改为“忽略”,但这没有用。
我想用 FZF搜索文件,然后在我选择的编辑器中打开它们,例如崇高的,原子。我不知道如何为此配置我的 shell,我已经尝试了下面的方法,但我无法让它工作。 你能帮我吗? 谢谢! fe() { loca
我正在尝试将此 bash/zsh 函数转换为 fish。我想使用 rga-fzf,它是 zsh/bash 的一个函数,将 fzf 与 ripgrep-all 一起使用. (我的默认 shell 是 f
在 fzf 中,默认情况下,CTRL-P 和 CTRL-N 必然会在项目列表中上下移动。我怎样才能绑定(bind)到先前的历史和下一个历史呢? 最佳答案 从码头,检查 global options :
fzf 太棒了!我想用它来搜索 bash 历史记录。当找到匹配项时,我希望将其放置在命令行上,但不执行,以便我可以进一步编辑它。 (所有这些都在源 bash 函数或脚本中,因此它可以访问我的历史记录。
我想知道是否有办法让模糊搜索工具“fzf”将查询复制到命令行以便能够对其进行编辑,以防没有令人满意的匹配。 谢谢。 最佳答案 您可以创建一个键绑定(bind),将所选文件的路径(或该文件的内容)复制到
我有一个 tmux 命令来切换窗口,有点像这些人 tmux script for fast window switching with fzf-tmux gives me the wrong opti
我在使用 FZF Vim 插件为最近使用的文件找到合适的解决方案时遇到问题。 此插件应具有以下功能: 显示在当前 vim session 中打开的文件(如缓冲区) 过滤文件,如 NERD_tree,
我尝试fzf | myprogram时会发生这种非常奇怪的行为,myprogram依次调用vim。到vim启动时,stty设置已出现问题。我能够在zsh&bash,config&no config,l
我实际上正在搜索以在 vim 中使用 :FZF 进行模糊搜索,但是使用这样的参数 :FZF -q/tmp/boulou 但是,将 /tmp/boulou 替换为在可视模式下选择的单词,并将其绑定(bi
我实际上正在搜索以在 vim 中使用 :FZF 进行模糊搜索,但是使用这样的参数 :FZF -q/tmp/boulou 但是,将 /tmp/boulou 替换为在可视模式下选择的单词,并将其绑定(bi
我正在使用下面的函数来搜索带有 ripgrep 的文件中的内容使用 fzf在 vim function! RipgrepFzf(query, fullscreen) let command_fmt
我有这个映射: nnoremap :Files 这工作正常,但是当我已经打开一个更改的文件时,当我切换到一个新文件时出现错误。 是否可以在启动 fzf 之前保存文件? 我试过这样的事情,但如果我没
我是 vim 的新手。我在网上读到 vim 中最好的模糊查找器之一是 fzf。我已经开始使用它了。但是每当我写命令 :Ag 我得到 ag is not found .我不知道这意味着什么,我不知道如何
我正在寻找一种方法来快速将我的 Vim 目录更改为我通过 FZF 类型的方式找到的目录。我知道它代表 Fuzzy File Searcher,而不是 Fuzzy Directory Searcher,
我无法弄清楚如何更改 VIM 中模糊查找的默认触发器。 默认触发器是:FZF 我希望触发器是 :fzf 谢谢! 最佳答案 您可以在 .vimrc 中为 fzf 添加自己的映射。 nnoremap
我刚刚用 fzf.vim 设置了 Neovim v0.4.4 ( commit ) 在运行 Manjaro 的新机器上使用 sudo pacman -Sy neovim .以前(未知版本)FZF 的窗
我是一名优秀的程序员,十分优秀!