最后更新于 .

相信不少朋友像我一样,无论在linux还是windows下都用vim来办公,但是毕竟vim原生于linux,windows下的某些支持还是做的不太好。 这个系列的文章,我们就一起探讨一下。 一.鸡肋的文件查找 在linux下,查找包含一段文字的文件列表是很方便的:

grep "txt" *

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

grep "txt" * -r

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

:vimgrep /an error/ *.c

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

:vimgrep /an error/ **/*

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

:copen

即可看到所有的文件列表。 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来做的软链接,即:

junction virtual_dir real_dir

这样不同目录之间做关联的问题也解决了,但是请千万注意一点: 与linux的软链接不同,用junction做了关联之后,删除虚拟的文件目录,也同样会把真实的目录删掉!务必小心! OK,暂时只总结了这两点,希望能给windows下的vim(gvim)用户提供一些帮助,以后的文章我们再继续讨论~

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 亚弥

    亚弥 on #

    说两点:

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

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

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

    Reply

    1. Dante

      Dante on #

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

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

      <pre lang="vim" line="1">
      :h getqflist
      </pre>

      Reply

  2. xell

    xell on #

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

    fsutil hardlink create

    Reply

    1. Dante

      Dante on #

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

      Reply

  3. roddger

    roddger on #

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

    Reply

    1. 依云

      依云 on #

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

      Reply

      1. Dante

        Dante on #

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

        Reply

      2. roddger

        roddger on #

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

        Reply

        1. 依云

          依云 on #

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

          Reply

    2. Dante

      Dante on #

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

      Reply

  4. 梧桐

    梧桐 on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

      1. nswutong

        nswutong on #

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

        Reply

  5. baby stroller

    baby stroller on #

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

    Reply

    1. Progray

      Progray on #

      心什么结什么东东啊?

      Reply

    2. Dante

      Dante on #

      呃,表示不理解。。

      Reply

  6. xiaowu

    xiaowu on #

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

    怎么打开这些文件呢?

    Reply

  7. cc

    cc on #

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

    Reply

    1. 依云

      依云 on #

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

      Reply

      1. 阿讷

        阿讷 on #

        哈哈, 我后来也后悔了.

        Reply

  8. Dan_Sean

    Dan_Sean on #

    Windows 7之前的系統可用 linkd 命令建立文件或文件加連接,Windows 7 及之後的系統可用 mklink 命令建立。 <img src="http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/24/sweata_org.gif" />

    Reply

    1. Dan_Sean

      Dan_Sean on #

      好吧,當我沒說……

      Reply

      1. 阿拉里

        阿拉里 on #

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

        Reply

发表评论