V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alexapollo
V2EX  ›  Vim

有人分享一下对 vim 的最佳实践吗?

  •  
  •   alexapollo · 2015-01-06 15:02:50 +08:00 · 15439 次点击
    这是一个创建于 3638 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:用过VC/VS/Matlab/iPython Notebook/PyCharm/Sublime/Notepad++/WindIDE/vim等编辑代码的工具,其中VS功能性最强但不适用linux,其他种种感觉还是vim用起来最顺手。
    语言:C/C++、Python、JavaScript

    vim方面,之前用过 https://github.com/spf13/spf13-vim https://github.com/amix/vimrc 等,但感觉都有点不顺手(?),因为对很多功能都不了解,而且都有没有解决的痛点
    实际上我只需要:自动补完、自动记录上次编辑并可以回退、自动indent、拷贝不需要set paste、自动lint、速度快不卡顿 这些功能而已~

    问题来了,不管我的这些乱七八糟的需求,有人分享下自己的vim的最佳实践吗?

    50 条回复    2015-07-05 15:54:54 +08:00
    xcv58
        1
    xcv58  
       2015-01-06 15:07:39 +08:00 via iPhone
    可以试试我的 vim.xcv58.com
    chmlai
        2
    chmlai  
       2015-01-06 15:14:31 +08:00
    spf13挺好的.
    tuuuz
        3
    tuuuz  
       2015-01-06 15:24:20 +08:00
    前排
    wgwang
        4
    wgwang  
       2015-01-06 15:27:09 +08:00
    https://github.com/wgwang/.vim

    我的vim配置, python, go, c, cpp, java, js, json, markdown, restructuredText 等都支持。 经常用的是python,cpp, go, markdown和rst等几个,其他的偶尔用用。 具体使用见readme.md, 文档写的不是很详细, 有问题一起讨论。

    ubuntu和mac用过
    chon
        5
    chon  
       2015-01-06 15:27:28 +08:00
    直接上手用,需要什么解决什么。

    需要自动缩进?加上
    需要自动补全?加上
    ...
    iewgnaw
        6
    iewgnaw  
       2015-01-06 15:40:28 +08:00   ❤️ 1
    zhouzm
        7
    zhouzm  
       2015-01-06 15:45:37 +08:00
    使用 Vim 就是一个打造自己喜欢或适合自己的 Vim,主要包括 rc 配置,插件和快捷键设置,@chon 说的一点没错,你想要什么功能,自己 google ,然后加上

    vim 技巧可以在 Vim Tips Wiki 里搜索:
    http://vim.wikia.com/wiki/Vim_Tips_Wiki

    插件管理,我比较喜欢 Vundle:
    https://github.com/gmarik/Vundle.vim
    或者试试 neobundle:
    https://github.com/Shougo/neobundle.vim
    adieu
        8
    adieu  
       2015-01-06 15:56:09 +08:00   ❤️ 2
    可以参考下这个问题的第一个回答 http://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim 较深对vim的理解。

    当理解了作者的设计思路之后,再试用vim就会顺手很多了。插件的话更多的是起到辅助效果,可以参考这两篇帖子:

    - http://mirnazim.org/writings/vim-plugins-i-use/
    - http://www.sontek.net/blog/2011/05/07/turning_vim_into_a_modern_python_ide.html

    如果google一下的话会找到更多的参考帖子,就不多列了。
    adieu
        9
    adieu  
       2015-01-06 15:58:42 +08:00   ❤️ 1
    另外还推荐 https://pragprog.com/book/dnvim/practical-vim 这本书,以及作者的 http://vimcasts.org/ 这个视频教学站
    henices
        10
    henices  
       2015-01-06 16:02:35 +08:00   ❤️ 1
    1. 作为一个vim的老用户,我建议如果真的想用好vim,多看看help

    在vim中输入 :help

    2. 在插件管理方面楼上说的vundle还是很不错的。

    3. 不用乱用别人的配置,够用就好,自己多琢磨

    4. 推荐几个我相见恨晚的神级插件

    Bundle "scrooloose/syntastic"
    Bundle "Valloric/YouCompleteMe"
    Bundle "Shougo/unite.vim"
    Bundle 'Lokaltog/vim-powerline'
    Bundle 'tpope/vim-fugitive'
    Bundle "othree/eregex.vim"

    最后: https://github.com/henices/dot_vim
    KentY
        11
    KentY  
       2015-01-06 16:10:18 +08:00 via Android
    可以理解基础上借鉴别人的配置,但不要用任何所谓的vim distributions,没好处。
    tsl0922
        12
    tsl0922  
       2015-01-06 16:11:25 +08:00
    不折腾,在用 Janus: https://github.com/carlhuda/janus
    KentY
        13
    KentY  
       2015-01-06 16:14:39 +08:00 via Android
    @tsl0922 这就是我所谓的vim distribution
    miyuki
        14
    miyuki  
       2015-01-06 16:16:53 +08:00 via Android
    那个炒股的……
    felixzhu
        15
    felixzhu  
       2015-01-06 16:17:42 +08:00
    自己写,要啥补啥不就行了
    jason52
        16
    jason52  
       2015-01-06 16:18:06 +08:00 via Android
    不过老看das,那个大叔用的那么熟练,结果却是不怎么用插件
    harryert
        17
    harryert  
       2015-01-06 16:24:31 +08:00
    推荐一个我老大@openroc的vim配置文件,我一直在用,很好用。。。
    https://github.com/openroc/or-vimrc
    jason52
        18
    jason52  
       2015-01-06 16:47:38 +08:00
    @henices eregex.vim 转换了vim蛋疼的内置regexp语法,挺不错的。但是 incsearch无效了啊。google了一圈没找到解决方法。
    zeayes
        19
    zeayes  
       2015-01-06 16:49:18 +08:00
    @iewgnaw +1

    参考他安装的插件,自己去折腾吧。
    jason52
        20
    jason52  
       2015-01-06 16:52:10 +08:00
    https://github.com/othree/eregex.vim/issues/9 看来得等更新了。暂时弄个开关关掉它。
    fullstack0xyz
        21
    fullstack0xyz  
       2015-01-06 16:59:02 +08:00   ❤️ 1
    花几个小时把这个看看然后自己配 http://learnvimscriptthehardway.stevelosh.com/

    很快的,直接用别人的话总有不顺手的地方,如果基本的配置不懂想改都不会改,很蛋疼的

    推荐几个常用的插件
    目录树: nerdtree
    自动补全: neocomplcache
    注释: vim-commentary
    多行游标: vim-multiple-cursors
    还有emmet
    henices
        22
    henices  
       2015-01-06 17:08:44 +08:00
    @jason52 这问题我也发现了,不过还好,一般影响不大。
    thinker3
        23
    thinker3  
       2015-01-06 17:16:43 +08:00
    {windows ubuntu mac} * {vim gvim} 够折腾的
    zuyf
        24
    zuyf  
       2015-01-06 17:23:24 +08:00   ❤️ 1
    数年后Wu Jie 大神又更新了exvim,文档很全,可扩展性很好,个人认为是Vim社区最佳整体解决方案(特别是对于中国人来说)
    http://exvim.github.io/
    https://github.com/exvim/main
    zuyf
        25
    zuyf  
       2015-01-06 17:33:14 +08:00
    个人对几个好用的Vim插件的总结: http://zuyunfei.com/categories/Vim/
    配合exvim提供了基础的工程管理,配置好几个关键功能,日常开发中已经足够了
    coolicer
        26
    coolicer  
       2015-01-06 18:34:55 +08:00 via iPhone
    最近用linux,用回vim,这回要什么加什么,不拿别人配置了。搞了一个主题,基本满足,好看。好像叫solaried,手机懒得找单词
    ayang23
        27
    ayang23  
       2015-01-06 18:45:24 +08:00
    c++/c/python, 一个ycm就解决了,剩下的就是快捷键了
    spacewander
        28
    spacewander  
       2015-01-06 19:05:56 +08:00   ❤️ 1
    自动补完 : 依靠插件,比如YouCompleteMe NeoComplete之类。原生的可以用C-X C-p系列。

    自动记录上次编辑并可以回退 : u是undo,C-r是redo,不喜欢可以remap掉。想体验下高级功能可以安装sjl/gundo.vim,然后开启丧心病狂的undo模式:

    set undolevels=1000 " How many undos
    set undoreload=10000 " number of lines to save for undo
    set undofile " keep a persistent backup file
    set undodir=~/bak/vimundo/

    自动indent : Vim自带支持基本上可以处理。如果Vim不支持,可以安装语言相关插件。另外=可以调整indent

    拷贝不需要set paste : 这个是痛点。可以`set pastetoggle=<F5>`来切换paste模式,不过没多大改善。你也可以使用GUI版本的Vim,它提供了特殊的方式来复制/粘贴剪贴板的内容。

    自动lint :使用scrooloose/syntastic来提供静态分析。不过只能在打开/保存的时候才会lint。YouCompleteMe提供了针对C/C++的实时lint。

    速度快不卡顿 : 少装插件,换更好的装备。

    另外推荐 http://learnvimscriptthehardway.onefloweroneworld.com/
    KentY
        29
    KentY  
       2015-01-06 20:00:21 +08:00 via iPhone
    @jason52 我觉得vim的regex很强,有时比pcre 顺手
    jason52
        30
    jason52  
       2015-01-06 20:58:38 +08:00
    @KentY 非贪婪{-}类似于这样的太不友好了吧,还有很多的转义。
    看对照表




    hitsmaxft
        31
    hitsmaxft  
       2015-01-06 22:29:56 +08:00
    http://blog.bhe.me/blog/2014/03/23/introduction-to-vim/ 为数不多的blog之一.

    用了这么多年vim, 最后反而越来越少依赖插件, 因为大部分插件的效率很低.
    vinceguo
        32
    vinceguo  
       2015-01-06 22:45:33 +08:00
    我也是倾向于少折腾的。呵呵,我懒。如上面有人说的,需要什么加什么。
    vim用起来更方便还是多熟悉点快捷键吧。
    以前用vim写C/C++,就没用过插件。
    最近写python,试了下python-mode,觉得不是很爽,砍了。
    我的.vimrc文件就是下面这些了。

    filetype plugin indent on
    "set cindent
    set tabstop=4
    set shiftwidth=4
    "set softtabstop=4
    set expandtab
    set number
    set showcmd
    set showmatch
    set smartcase
    set incsearch
    set autowrite
    "set foldmethod=syntax
    set fileencoding=UTF-8
    9hills
        33
    9hills  
       2015-01-06 22:51:40 +08:00
    VIM配置有两种途径:

    1. 从最基本的开始,不要用别人的配置:
    http://mislav.uniqpath.com/2011/12/vim-revisited/

    2. 用现成的发行版


    我的感悟是,不要用太多的功能,简单就好
    Fechin
        34
    Fechin  
       2015-01-06 22:56:43 +08:00 via iPad
    再好的配置也比不上私人订制
    前人的经验总结可供参考,直接上成品显然不能解决痛点
    Goooogle
        35
    Goooogle  
       2015-01-06 23:11:18 +08:00 via Android
    vim配置可以参考 但不要直接复制
    根据自己需要来配置

    推荐Learn Vimscript the hard way

    我的配置
    https://github.com/wu-nerd/dotfile
    有些地方没配置好 一直拖到现在
    比如说自定义折叠部分

    以前别人发的视频
    https://www.v2ex.com/t/125999
    KentY
        36
    KentY  
       2015-01-07 00:21:55 +08:00   ❤️ 1
    @jason52 是的,和PCRE的类似用法语法上有区别,尤其是look-behind, look-ahead等。 但是当你用多了, 练熟了,就掌握了, 当然不是为了掌握而去掌握。这个过程是很值得的,因为很多vim的那些语法有很强的功能,比如:\zs \ze极其常用,还有很常用的\A \a \L \l \U \u 还有vim的look behind 可以支持动态长度, Perl的还不行, (有些PCRE的实现支持\K)
    多行匹配的\_.
    还有\%[ ]用起来多爽!比如 foo\%[abcd...] 匹配 fooa fooab fooabc fooabcd
    还有vim特有的\v \V 用起来多顺,根据情况能省很多escaping。
    还有匹配某列\%c 某行\%l 甚至range,
    还有匹配光标\%#,这些PCRE是做不了的
    还有对数字10进制,8进制,HEX的匹配,\%d \%x \%u \%U 等, 这相对于Pcre来说就简单快捷多了
    还有\%^ \%$等等这些是不是也很方便呢?
    .....

    当然还有很多很多, 这些都要用了才知道.

    存在20多年了, 没有人去改变,有它的道理。
    zhimingcc
        37
    zhimingcc  
       2015-01-07 00:30:01 +08:00
    能讲讲emacs最佳实践吗,个人感觉emacs用起来更顺手,虽然vim是默认安装
    xcv58
        38
    xcv58  
       2015-01-07 01:01:15 +08:00
    @zhimingcc Emacs 可以看 http://ergoemacs.org/emacs/emacs.html 的教程,也可以 clone 别人的 repo 然后自己定制。
    最后再学习一下 Elisp 自己写插件。
    我现在一般写程序时候都是用 Emacs,临时修改文件用 vim 。

    Emacs 用了 evil 操作几乎和 vim 一模一样,但有些特殊的功能需求还是 Emacs 的插件用着方便一些。

    最后,厚颜无耻地打下广告: emacs.xcv58.com clone from https://github.com/purcell/emacs.d
    NathanInMac
        39
    NathanInMac  
       2015-01-07 03:01:43 +08:00
    虽然我也坚信适合自己的就是好的,但是 maximum awesome 确实不错https://github.com/square/maximum-awesome

    几个快捷键的改动和 tmux 的配置深得我心
    ffffwh
        40
    ffffwh  
       2015-01-07 03:20:24 +08:00
    把Ctrl-g映射成Esc






    以后换Emacs可以少痛点
    vietor
        41
    vietor  
       2015-01-07 08:14:32 +08:00 via Android
    Emacs才是终点
    bjzhush
        42
    bjzhush  
       2015-01-07 09:10:05 +08:00
    多看别人的配置,写自己的配置
    这样用起来才顺手
    calon
        43
    calon  
       2015-01-07 09:59:01 +08:00
    对 Vim 搜索的正则表达式不习惯,又不想折腾 magic 模式的,可以试试 escape_search(script_id=5066 )。
    calon
        44
    calon  
       2015-01-07 10:00:59 +08:00
    Vim 这种可以高度个性化自定义配置的编辑器很难说有放诸四海皆准的最佳实践吧。
    在28楼建议的基础上结合别人的 vimrc 自己摸索吧。
    davansy
        45
    davansy  
       2015-01-07 10:33:49 +08:00
    @adieu stackoverflow 上的那个回答简直不能再赞!打住就这样说了,你用不惯VIM 说明你根本没有深入理解他! @alexapollo 我再给你推荐几篇文章:
    1. http://www.viemu.com/a-why-vi-vim.html
    2. http://stevelosh.com/blog/2010/09/coming-home-to-vim/
    3. http://pascalprecht.github.io/2014/03/18/why-i-use-vim/
    4. http://yehudakatz.com/2010/07/29/everyone-who-tried-to-convince-me-to-use-vim-was-wrong/

    依我使用VIM 的经验来看,VIM 命令实际上 并不难记忆:
    davansy
        46
    davansy  
       2015-01-07 10:42:54 +08:00
    @adieu stackoverflow 上的那个回答简直不能再赞!打住就这样说了,你用不惯VIM 说明你根本没有深入理解他! @alexapollo 我再给你推荐几篇文章:
    1. http://www.viemu.com/a-why-vi-vim.html
    2. http://stevelosh.com/blog/2010/09/coming-home-to-vim/
    3. http://pascalprecht.github.io/2014/03/18/why-i-use-vim/
    4. http://yehudakatz.com/2010/07/29/everyone-who-tried-to-convince-me-to-use-vim-was-wrong/

    依我使用VIM 的经验来看,VIM 命令实际上 并不难记忆例如:
    1. di( delete inner ( 翻译出来就是: 删除括号里面的内容,但不包括括号,注意是 inner
    2. da( delete arround ( 删除括号里面的内容,包括括号
    3. ci{ change inner { 改变 大括号里面的内容
    等等...

    另外 VIM 的方向键为什么用 HJKL 这个几个和表示方向的英文单词缩写 扯不上半毛钱关系 的 字幕 是有历史原因的:

    Bill Joy 当时造vi 的时候没有方向键啊, 他用的是 ADM-3A 机器,这机器上 HJKL 键就表示的方向键:
    可以看看wikipedia 的介绍 http://en.wikipedia.org/wiki/ADM-3A
    henices
        47
    henices  
       2015-01-07 11:07:29 +08:00
    @jason52 @KentY 这几个选项可以缓解一下这个问题

    ```
    Examples:
    after: \m \M \V matches
    'magic' 'nomagic'
    $ $ $ \$ matches end-of-line
    . . \. \. matches any character
    * * \* \* any number of the previous atom
    () \(\) \(\) \(\) grouping into an atom
    | \| \| \| separating alternatives
    alphabetic character
    \ \ \ \ literal backslash
    \. \. . . literal dot
    \{ { { { literal '{'
    a a a a literal 'a'

    ```

    {only Vim supports \m, \M, and \V}

    It is recommended to always keep the 'magic' option at the default setting,
    which is 'magic'. This avoids portability problems. To make a pattern immune
    to the 'magic' option being set or not, put "\m" or "\M" at the start of the
    pattern.
    KentY
        48
    KentY  
       2015-01-07 16:40:29 +08:00 via iPhone
    @henices 其实这些都不是问题。magic 默认设好,随用根据需要现换是vim使用很常见的情况。我2000年第一次不得不用vim,骂的不行,太非人类了。正式开始使用是从2003,2004年,到现在也有10年了。电脑没有vim是没法接受的事。除了java,所有文本编辑全在vim里。上面所谓很多技巧,对于塌下心来,打算学习,接受这个编辑器的新用户,前2月就都掌握了。都是常识性的。vim编辑快在不用想,肌肉反应。
    alexapollo
        49
    alexapollo  
    OP
       2015-01-09 19:21:40 +08:00
    @iewgnaw 很棒的工程,收藏了
    @adieu 这个SO回答赞暴了
    @fullstack0xyz 找时间啃。。。
    @zuyf 看起来不错,就是赞少了点。。
    @spacewander 给的这个网址竟然是中文的,酷毙了
    ivanlw
        50
    ivanlw  
       2015-07-05 15:54:54 +08:00
    可以参考一下我的配置https://github.com/tolinwei/tube-vim

    欢迎star和open issue
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:19 · PVG 03:19 · LAX 11:19 · JFK 14:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.