相信不少朋友像我一样,无论在linux还是windows下都用vim来办公,但是毕竟vim原生于linux,windows下的某些支持还是做的不太好。
这个系列的文章,我们就一起探讨一下。

一.鸡肋的文件查找
在linux下,查找包含一段文字的文件列表是很方便的:

要遍历所有所有的子文件夹也很容易:

但是到了windows下,用那个鸡肋的文件查找功能基本上查不到任何想要的东西,怎么办呢?
非常幸运的,vim考虑到了这一点,在内部实现了 vimgrep 这样一个命令,之前有在文章中介绍过,这次我们详细介绍一下.
虽然名字看起来和grep很像,但是用法还是不一样的,先来看一下普通的查找:

而如果需要循环遍历所有子目录的话,语法如下:

搜索到的文件列表会加入到quickfix中去,执行:

即可看到所有的文件列表。

OK,这样windows下内容查找的问题就解决啦~

二.没有类似软链接功能
有些没用过linux的朋友可能不明白什么叫软链接,简单来说即一个文件或者文件夹指向了另一个文件或者文件夹,在外面的使用者看起来,没有任何区别。但是为什么在windows下使用vim会遇到这个问题呢?
这里要先介绍一下vimwiki这个插件,这个插件可以用vim来打造个人wiki,被号称是使用vim必装插件,笔者也确实一直在用着,主要是用来做GTD。
但是wiki的问题就在于会生成很多独立的页面,而如果我有两台电脑,希望能够在家和工作都能对GTD的时间表进行处理,于是需要做同步该怎么办呢?现在国内已经有了不少不错的云存储服务,这里大家自己找一下。
问题就在于如果云存储的同步目录和wiki存放的目录不一致怎么办呢?linux下面可以很简单的通过软链接的方式来解决,但是windows xp及之前却并没有自带这样的工具。
问题当然是有解决办法的,详细参考这篇文章:
http://jdev.tw/blog/1242/mklink-junction-quick-folders-access
根据文中介绍,Vista及以上版本是默认带有mklink,实现了类似软链接的功能,而由于本人电脑用的是XP,所以使用junction来做的软链接,即:

这样不同目录之间做关联的问题也解决了,但是请千万注意一点:
与linux的软链接不同,用junction做了关联之后,删除虚拟的文件目录,也同样会把真实的目录删掉!务必小心!

OK,暂时只总结了这两点,希望能给windows下的vim(gvim)用户提供一些帮助,以后的文章我们再继续讨论~

暂无相关产品

23则回应给“windows下使用vim(gvim)的不便及解决方案(1)-文件查找和软链接”

  1. 亚弥说道:

    说两点:

    1. 基本上我是直接 :vim /foo bar/ **/*.c 这么用的= =:vim 给我一种奇特的感觉~~似乎是在Vim里面开Vim。

    2. 如果删除链接都可以删掉原文件,那么就证明这不是软链接,而是硬链接。其实软链接还有个名字叫符号链接。Windows一直都有,就是快捷方式,只不过大部分Linux系的工具不认这个而已(lnk文件)。

    然后是一个问题:
    我想把qf列表里面所有找到的文件都加到我的buffer列表去,咋办?

    [回复]

    Dante 回复:

    我想把qf列表里面所有找到的文件都加到我的buffer列表去

    这个恐怕只能写脚本来遍历一下getqflist(),然后挨个编辑关闭.
    详细可以:

    [回复]

  2. xell说道:

    如果是针对文件,还可以创建硬链接,这种情况下,删除某个链接并不会删除文件本身:

    fsutil hardlink create

    [回复]

    Dante 回复:

    嗯,由于vimwiki创建的文件有很多,所以只能通过目录来同步。

    [回复]

  3. roddger说道:

    windows下可以用 GNUwin32 的 grep。
    据说速度要比vimgrep快,因为不用将文件读入buffer。
    如果文件不多,用vimgrep也足够了。

    [回复]

    依云 回复:

    unxutils 的 grep 等工具很不错,只依赖 MS 已有的库。再加上 Grep.vim 插件,找文件就方便了。

    [回复]

    Dante 回复:

    哈哈,说起来最近觉得windows下的没有find命令也是个很讨厌的事情,所以又开始折腾FuzzyFinder,计划在第二篇中提到他。

    [回复]

    roddger 回复:

    grep.vim插件简单地试过,目录中有空格好像有问题

    [回复]

    依云 回复:

    Linuxer 表示很少有目录名字中含有空格 ;-)

    [回复]

    Dante 回复:

    为了用gcc,在windows下已经安装了mingw,所以是有grep命令的,不过考虑到很多朋友可能没有安装,所以用vim默认的命令可能兼容性更高一些。

    [回复]

  4. 梧桐说道:

    mklink太好用了,过年看到了这个东西激动死了,哈哈

    [回复]

    Dante 回复:

    一直没机会换win7,只有眼馋的份啊

    [回复]

    nswutong 回复:

    回来看到以前发的傻帖子,win7的mklink各种坑爹,经常搞的系统故障,相信微软是我天真了

    [回复]

  5. baby stroller说道:

    现在每个问题都有解决的方法啊,只是心结谁来打开呢

    [回复]

    Progray 回复:

    心什么结什么东东啊?

    [回复]

    Dante 回复:

    呃,表示不理解。。

    [回复]

  6. xiaowu说道:

    :copen 打开查找到的文件信息

    怎么打开这些文件呢?

    [回复]

  7. cc说道:

    Windows下vim编辑文件后老留下些 filename.txt~
    这个该怎么解决?

    [回复]

    依云 回复:

    :set nobackup
    我曾经关掉这个选项,后来后悔了。希望你不会后悔。

    [回复]

    阿讷 回复:

    哈哈, 我后来也后悔了.

    [回复]

  8. Dan_Sean说道:

    Windows 7之前的系統可用 linkd 命令建立文件或文件加連接,Windows 7 及之後的系統可用 mklink 命令建立。

    [回复]

    Dan_Sean 回复:

    好吧,當我沒說……

    [回复]

    阿拉里 回复:

    自言自语也蛮好玩的,兄弟

    [回复]

发表评论