加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

VIM 7:如何以有效的方式从代码库的根源导航代码源代码树?

发布时间:2020-12-15 21:21:08 所属栏目:安全 来源:网络整理
导读:我有一个在庞大的代码库中跨多个文件导航代码的系统,我想改进/修复它目前的缺点: 我的shell预先配置为在我的代码库的根目录下打开 – 让我们称之为Dev /. 在同步/代码构建期间,我有一个脚本,它自动将所有.h和.c文件的相对路径存储在cscope使用的单个文件中(
我有一个在庞大的代码库中跨多个文件导航代码的系统,我想改进/修复它目前的缺点:

我的shell预先配置为在我的代码库的根目录下打开 – 让我们称之为Dev /.
在同步/代码构建期间,我有一个脚本,它自动将所有.h和.c文件的相对路径存储在cscope使用的单个文件中(让我们称之为cscope.files).

一旦我同步,这个文件就会更新 – 然后我可以使用Dev /中的以下命令在vim中打开我想要的任何文件:

vif "part of file name",

哪里

vif:     aliased to vi `grep !:1 cscope.files`

如果我将文件名的一部分提供足够长的时间来唯一标识它,我可以立即在vim中打开它.

现在,这种方法的缺点是,当我已经打开一个文件,并跳转到另一个文件而不退出vim时,我能做到的唯一方法是

:!vif *file2*

这会生成一个新shell,然后在那里启动的vim中打开该文件.因此,我无法在两个文件之间切换(使用Ctrl- ^).我无法想出一个解决方案:

a)让我立即打开Dev /中的任何文件

b)让我在同一个shell中打开vim中的任何其他文件(一旦我打开现有文件),这样2个vim会话就会互相识别(我可以使用Ctrl-^在2之间跳转)

我知道这是一个很长的问题(如何谷歌这个:)),但我打赌解决方案对于更熟练的vim的人来说简单明了!

如果问题的任何部分是模糊的,请告诉我,我会澄清它……

更新:
在使用快捷方式进行自定义之后,我最终采用了cscope方式(因为在cscope.files上使用’gf’仍然阻止我在两个源文件之间切换).有关快捷方式,请参见VIM 7 and cscope: Using “cscope find f” inside a keyboard mapping for switching between files .

解决方法

在这样的事情中使用vim的grep:

:map <F1> :vim <pattern> cscope.files<CR>gf

例如,有了这个:

vnoremap <F1> "ry:exe ':1vim /'.@r.'/ cscope.files'<CR>gf

选择(视觉模式)您要搜索的模式,然后按F1.将打开与模式匹配的第一个文件,替换当前缓冲区*.

*如果可以的话.即如果保存当前缓冲区或设置隐藏等.

如果您希望获得提示,请使用input():

nnoremap <F1> :exe ':1vim /'.input("Enter pattern: ").'/ cscope.files'<CR>

[但是你必须手动gf,因为input()会消耗地图的其余字符.为避免这种情况,您可以使用inputsave()和inputrestore()]

更新

…例如像这样:

function! GetPat()
  call inputsave()
  let mypat = input("Enter pattern: ")
  call inputrestore()
  return mypat
endfunction

nnoremap <F1> :exe ':1vim /'.GetPat().'/ cscope.files'<CR>gf

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读