分享vim使用心得

62 views
Skip to first unread message

Zhang Cheng

unread,
Jun 10, 2014, 8:43:14 AM6/10/14
to USTC LUG
似乎列表里现在很少有人分享一些工具的使用心得了,我来冒个泡,抛砖引玉。

我的vim配置文件放在github上: https://github.com/StephenPCG/dotvim

体验方法:

    cd /tmp/
    git clone --recursive https://github.com/StephenPCG/dotvim
    vim -u /tmp/dotvim/vimrc


# 对一些特性的介绍

## 随处使用
如上述的体验方法,将配置文件放到任何地方都可以使用,在有些时候会很方便。例如我临时在另外一个人的机器上使用时,将自己的配置安装到别人的 $HOME/.vim 下并不礼貌。这里面的要点:

* 如果只是一个配置文件,没有插件等其他文件,那么什么都不用配置,只需要运行 vim -u /path/to/vimrc
* 不过许多时候总是会使用插件,或者可能有多个vimrc文件(按照功能分割成多个文件),这时候可以在vimrc中使用绝对路径:

    let g:vimrcroot = fnamemodify(resolve(expand('<sfile>:p')), ':h') . "/"

  将这个绝对路径添加到 runtimepath 中,以便 vim 能够加载这里面的插件:

    let &runtimepath = &runtimepath . "," . g:vimrcroot

  如果有多个文件,需要 source 时,可以这样:

    exec "source " . g:vimrcroot . "functions.vimrc"

​  也可以写成一个函数:​

    function! Source(file)
      exec "silent! source" . g:vimrcroot . a:file
    endfunction

    call Source("filetype.vimrc")

​  在脚本中其他地方使用路径时,也尽可能使用相对于 g:vimrcroot 的路径。

## 使用 pathogen + git submodule 管理插件​
​每个人的习惯不一样,有一些人推荐vundle,我这里仅介绍pathogen。使用pathogen,可以将所有的插件都放到一个单独的目录下,这样安装、删除插件都很方便,比如我这里都放在了 dotvim/bundles/ 下面。

​git submodule可以理解为git项目中的子项目,每个子项目都使用自己的git仓库管理。现在大多数的vim插件都有git仓库,所以我将每个插件都通过 git submodule 的方式放到 bundles/ 目录下,​这样将来要更新插件也很方便,只需要到相应的目录下执行: git pull origin master,或者批量更新 git submodule foreach 'git pull origin master'。

我前面给出的git clone命令中'--recursive'表示在第一次clone时就将所有的子项目全clone下来。分解动作其实是:

    cd dotvim
    git submodule init
    git submodule update

## 根据环境自动屏蔽一些插件
使用 pathogen 来管理插件时,可以方便的判断插件是否被启用,只用看这个插件是否在指定的 bundles/ 目录下。要临时禁用目录时,可以配置 g:pathogen_disabled 中添加配置即可。我写了两个Helper函数:

    function! DisablePlugin(plugin)
      if !exists("g:pathogen_disabled")
        let g:pathogen_disabled = []
      endif
      let g:pathogen_disabled += [a:plugin]
    endfunction
    
    function! IsPluginEnabled(plugin)
        if finddir(a:plugin, expand(g:vimrcroot . "bundles/")) != "" && (index(g:pathogen_disabled, a:plugin) < 0)
            return 1 | else | return 0 | endif
    endfunction

​例如我使用的neocomplete有两个版本,一个是带cache的 neocomplcache,另一个不带cahce的 neocomplete​,后者性能比前者好,但依赖于"lua",所以可以在vimrc中根据运行的vim版本来决定禁用另外一个:

    if has("lua")
      call DisablePlugin('neocomplcache')
    else
      call DisablePlugin('neocomplete')
    endif

也可以根据插件是否被启用来决定是否需要一些配置,例如:

    ​if IsPluginEnabled("vim-snippets")
      let g:neosnippet#snippets_directory = g:vimrcroot . 'bundles/vim-snippets/snippets'
    endif
# 一些小技巧

## <C-L> to clear highlighting
以前在搜索完一个词后,想取消高亮时,需要敲 :nohlsearch<cr> ,或者搜索一堆乱码 /zxcv (这个按键比前面的要快很多),但其实还是很累。在网上看到有人使用ctrl-l来取消高亮。
ctrl-l本来是刷新屏幕的快捷键,顺便做一下这个事毫无违和感。

    if maparg('<C-L>', 'n') ==# ''
      nnoremap <silent> <C-L> :nohlsearch<CR><C-L>
    endif

​## <C-Z> to open shell
默认情况下,​在vim中按 ctrl-z 会将vim suspend到后台,然后通过 fg 再唤回来,不过我不喜欢 fg 这个命令,更喜欢直接按 ^d 来退出当前的shell,所以将vim的ctrl-z绑定到 :shell<cr>,这样按 ctrl-z 时会打开一个新的shell(vim的子进程),在gvim中同样可以使用:

    nmap <C-Z> :shell<cr>

## 终端下 alt- 快捷键的绑定
这个其实一直挺蛋疼的,有些终端下,alt-X 发出的是一个高位置1的字符,有的终端下发出的是 esc-X 两个字符。在后面这种终端下,要绑定 alt-X 就必须绑定 esc-X,这会导致按esc之后需要等半天,或者干脆许多人每次按esc都按两下。在网上看到了一个不错的解决方案:http://lilydjwg.is-programmer.com/posts/23574.html
这篇博文中的代码不是最新的,最新的代码在:https://github.com/lilydjwg/dotvim/blob/master/plugin/escalt.vim,注意不要直接copy内容,必须将源文件下载下来,因为里面有大量特殊字符。

这个插件的原理是修改 <M-x> 的键值,这种方式下,可以将ttimeoutlen设的很小,所以随便绑定都没有问题。


​就写这么多。大家如果对我的配置文件感兴趣,其中某些配置不理解的话,可以在这个主题里提问。​


--
Cheng,
Best Regards

Yuanchong Zhu

unread,
Jun 10, 2014, 11:36:28 AM6/10/14
to ustc...@googlegroups.com
C-L的那个简直赞!

另外决定把git-submodule用起来,我自己的配置文件也可以再整理一下了~


--
-- 来自USTC LUG
请使用gmail订阅,不要灌水。
更多信息more info:http://groups.google.com/group/ustc_lug?hl=en?hl=en

---
You received this message because you are subscribed to the Google Groups "USTC_LUG" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ustc_lug+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
灿烂星空,你就是我的英雄!

Yan Wang

unread,
Jun 10, 2014, 12:28:14 PM6/10/14
to ustc...@googlegroups.com
大赞~~来吧vimrc下下来学习一下~~

vim -u好棒。不过每次在别人机器上(帮妹子们修电脑啥的,都是windows)都是装vim装半天。。vimrc反正他们也不用。。随手做广告,所以做了这个cygwin安装脚本:https://github.com/grapeot/debianinit


--

Xilin Sun

unread,
Jun 12, 2014, 5:43:39 AM6/12/14
to 科大LUG
2014-06-11 0:27 GMT+08:00 Yan Wang <gra...@gmail.com>:
> vim
> -u好棒。不过每次在别人机器上(帮妹子们修电脑啥的,都是windows)都是装vim装半天。。vimrc反正他们也不用。。随手做广告,所以做了这个cygwin安装脚本:https://github.com/grapeot/debianinit

修电脑还用装 vim 呀?

--
Xilin SUN
Department of Mechanical Engineering
The Hong Kong Polytechnic University
Tel: +852 9140 6662
About me: http://about.me/sxl

Yan Wang

unread,
Jun 25, 2014, 1:05:29 PM6/25/14
to ustc...@googlegroups.com
最近学习这个thread整理了一下自己的vimrc,也放了个.dotfiles:https://github.com/grapeot/.dotfiles FYI。

Yan Wang

unread,
Jun 25, 2014, 1:05:44 PM6/25/14
to ustc...@googlegroups.com
有时候自己的环境用习惯了。。哎。。


Hao Xu

unread,
Jul 12, 2014, 12:35:20 PM7/12/14
to ustc...@googlegroups.com
欢迎用我的vim配置
Ubuntu/Debian一件配置
curl -L http://stlover.org/server/vim.sh |sh

在 2014年6月10日星期二UTC-4上午8时43分14秒,Zhang Cheng写道:

Zhang Cheng

unread,
Jul 13, 2014, 12:29:26 AM7/13/14
to USTC LUG

2014-07-13 0:35 GMT+08:00 Hao Xu <xuha...@gmail.com>:
欢迎用我的vim配置
Ubuntu/Debian一件配置

​这样子不好,你得说清楚你这个脚本会把用户目录下的 ~/.vim/ 和 ~/.vimrc 删掉。不说清楚,万一谁手贱没有先看一眼你的脚本,自己的vim配置又没备份,那你就要被诅咒了。​

另外,vim这种东西,每个人的习惯不一样,而且每个人写作的内容也都不一样(比如有的人常写java,有的人常写python),每个人的配置都是不一样的。所以这种独占式的分享其实不太好,相对来说,分享一些技巧、插件更合适。



--
Cheng,
Best Regards

XuHao3e8

unread,
Jul 13, 2014, 1:28:37 AM7/13/14
to ustc...@googlegroups.com
这个是我自己快速配置服务器用的………好吧…下回会注意的

发自我的 iPhone
--
-- 来自USTC LUG
请使用gmail订阅,不要灌水。
更多信息more info:http://groups.google.com/group/ustc_lug?hl=en?hl=en

---
You received this message because you are subscribed to a topic in the Google Groups "USTC_LUG" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ustc_lug/gyI_a5rgpOY/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ustc_lug+u...@googlegroups.com.

farseer he

unread,
Jul 13, 2014, 2:37:54 AM7/13/14
to ustc...@googlegroups.com
我也分享一下我的配置吧 https://github.com/farseer90718/dotvim
第一次回复,想想还有些小激动呢 ~~

Guangyu Zhang

unread,
Jul 13, 2014, 11:21:45 AM7/13/14
to ustc_lug
现在用Emacs的人越来越少了呢
> --
> -- 来自USTC LUG
> 请使用gmail订阅,不要灌水。
> 更多信息more info:http://groups.google.com/group/ustc_lug?hl=en?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups
> "USTC_LUG" group.
> To unsubscribe from this group and stop receiving emails from it, send an

Zhuoyun Wei

unread,
Jul 13, 2014, 11:42:56 PM7/13/14
to ustc...@googlegroups.com
2014-07-13 12:29 GMT+08:00 Zhang Cheng <steph...@gmail.com>:
> 这样子不好,你得说清楚你这个脚本会把用户目录下的 ~/.vim/ 和 ~/.vimrc
> 删掉。不说清楚,万一谁手贱没有先看一眼你的脚本,自己的vim配置又没备份,那你就要被诅咒了。


我看到类似 curl https://example.org/foo.sh | bash 这样的命令就觉得很危险……

--
wzyboy
Link: https://wzyboy.im/
Twitter: @wzyboy

Zhang Cheng

unread,
Jul 14, 2014, 1:24:26 AM7/14/14
to USTC LUG

2014-07-14 11:42 GMT+08:00 Zhuoyun Wei <wzyb...@gmail.com>:
我看到类似 curl https://example.org/foo.sh | bash 这样的命令就觉得很危险……

​是的,我很不喜欢这种方式,除非这个项目(包括这条命令)有许多人关注,而且代码都在github上面,有许多人review,我才会去执行,否则我一般都选择不信任。​



--
Cheng,
Best Regards

Jack Zhang

unread,
Jul 14, 2014, 3:30:31 AM7/14/14
to ustc...@googlegroups.com

我一向下载下来看一看再决定是否执行,不管来源是什么。。。

--

Bojie Li

unread,
Jul 14, 2014, 3:51:54 AM7/14/14
to USTC_LUG

这不是黑 AUR 吗…… 话说 PKGBUILD 里要真多写了个空格什么的,一眼能看出来吗?

2014-7-14 下午1:24于 "Zhang Cheng" <steph...@gmail.com>写道:
--

Zhang Cheng

unread,
Jul 14, 2014, 4:31:18 AM7/14/14
to USTC LUG

2014-07-14 15:51 GMT+08:00 Bojie Li <boj...@gmail.com>:
这不是黑 AUR 吗…… 话说 PKGBUILD 里要真多写了个空格什么的,一眼能看出来吗?

​这种事情没法避免的,在deb中,如果谁在postinst/postrm脚本中多写了个空格也一样悲剧。这种事只能靠监督吧,监督有几个方面:
*一方面自我监督,比如deb包都是有签名的,每一段代码都可以追到是谁写的,所以开发者/打包者会对自己写的东西负责,也就会格外小心
*在github上面的,因为有大家的审查,如果有人被坑了,也可以找到代码是谁写的,所以也具有一定程度的不可抵赖性
*当发现问题代码之后,可以快速的反馈,及时做出补救措施,避免更多人被坑

我曾经其实也被“坑”过。似乎是debian还是ubuntu官方的仓库里,nginx这个包的postrm操作会删除所有的nginx日志。我当时基于那个包做了些修改(主要是修改编译选项,增加两个第三方模块),后来在线上有一次卸载nginx(装另外一个flavor的nginx),结果所有的日志都被删了。



--
Cheng,
Best Regards

hui zhang

unread,
Jul 14, 2014, 9:33:07 AM7/14/14
to ustc...@googlegroups.com
很久之前 在linux版 有个人share了 个 vim 加插件的包
我在其基础上做了些修改
目前常用功能都有配置,
插件也很全,
基本上可以做很多语言的ide
比吴垠教程 的那个功能还多,

但折腾完后, 我给大家的建议 还是不要追求这个,
vim 是个大坑,
在这上面花精力不值得,
还是用现代化的编辑器吧。



在 2014年6月10日星期二UTC+8下午8时43分14秒,Zhang Cheng写道:

Zhuoyun Wei

unread,
Jul 14, 2014, 10:16:46 AM7/14/14
to ustc...@googlegroups.com
2014-07-14 13:24 GMT+08:00 Zhang Cheng <steph...@gmail.com>:
> 是的,我很不喜欢这种方式,除非这个项目(包括这条命令)有许多人关注,而且代码都在github上面,有许多人review,我才会去执行,否则我一般都选择不信任。

话说 Homebrew 的官方安装方法就是这样来着 http://brew.sh/

Zhuoyun Wei

unread,
Jul 14, 2014, 10:17:52 AM7/14/14
to ustc...@googlegroups.com
2014-07-14 15:51 GMT+08:00 Bojie Li <boj...@gmail.com>:
> 这不是黑 AUR 吗…… 话说 PKGBUILD 里要真多写了个空格什么的,一眼能看出来吗?


用 yaourt 装的时候,看一眼 vote 很多,评论又没有什么问题的话,我就基本放心了。但是还是会看一眼 PKGBUILD 图个放心……

Zhang Cheng

unread,
Jul 14, 2014, 10:59:10 AM7/14/14
to USTC LUG

我感觉ruby社区和node社区比较喜欢用这种方式,不过我接触的样本太少,不展开了。

Cheng
(sent from a mobile device)

Zhang Cheng

unread,
Jul 14, 2014, 9:12:19 PM7/14/14
to USTC LUG

2014-07-13 12:29 GMT+08:00 Zhang Cheng <steph...@gmail.com>:
欢迎用我的vim配置
Ubuntu/Debian一件配置

​这样子不好,你得说清楚你这个脚本会把用户目录下的 ~/.vim/ 和 ~/.vimrc 删掉。不说清楚,万一谁手贱没有先看一眼你的脚本,自己的vim配置又没备份,那你就要被诅咒了。​

另外,vim这种东西,每个人的习惯不一样,而且每个人写作的内容也都不一样(比如有的人常写java,有的人常写python),每个人的配置都是不一样的。所以这种独占式的分享其实不太好,相对来说,分享一些技巧、插件更合适。

​对于这种问题,一方面在贴这条命令的地方,加以说明会删除文件,在执行时,最好也输出一条警告提示,询问是否继续,给用户最后一个机会。
我记得homebrew是会输出一条提示的。这样对自己其实也不会增加太多的麻烦。​



--
Cheng,
Best Regards
Reply all
Reply to author
Forward
0 new messages