我的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 .
解决方法
:map <F1> :vim <pattern> cscope.files<CR>gf
例如,有了这个:
vnoremap <F1> "ry:exe ':1vim /'.@r.'/ cscope.files'<CR>gf
选择(视觉模式)您要搜索的模式,然后按F1.将打开与模式匹配的第一个文件,替换当前缓冲区*.
*如果可以的话.即如果保存当前缓冲区或设置隐藏等.
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。