alexapollo
V2EX  ›  Vim

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

  •  
  •   alexapollo · Jan 6, 2015 · 16816 views
    This topic created in 4323 days ago, the information mentioned may be changed or developed.

    背景:用过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 replies  •  2015-07-05 15:54:54 +08:00
    xcv58
    xcv58
    Jan 6, 2015 via iPhone
    1
    可以试试我的 vim.xcv58.com
    chmlai
    chmlai
    Jan 6, 2015
    2
    spf13挺好的.
    tuuuz
    tuuuz
    Jan 6, 2015
    3
    前排
    wgwang
    wgwang
    Jan 6, 2015
    4
    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
    chon
    Jan 6, 2015
    5
    直接上手用,需要什么解决什么。

    需要自动缩进?加上
    需要自动补全?加上
    ...
    iewgnaw
    iewgnaw
    Jan 6, 2015❤️1
    6
    zhouzm
    zhouzm
    Jan 6, 2015
    7
    使用 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
    adieu
    Jan 6, 2015❤️2
    8
    可以参考下这个问题的第一个回答 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
    adieu
    Jan 6, 2015❤️1
    9
    另外还推荐 https://pragprog.com/book/dnvim/practical-vim 这本书,以及作者的 http://vimcasts.org/ 这个视频教学站
    henices
    henices
    Jan 6, 2015❤️1
    10
    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
    KentY
    Jan 6, 2015 via Android
    11
    可以理解基础上借鉴别人的配置,但不要用任何所谓的vim distributions,没好处。
    tsl0922
    tsl0922
    Jan 6, 2015
    12
    不折腾,在用 Janus: https://github.com/carlhuda/janus
    KentY
    KentY
    Jan 6, 2015 via Android
    13
    @tsl0922 这就是我所谓的vim distribution
    miyuki
    miyuki
    Jan 6, 2015 via Android
    14
    那个炒股的……
    felixzhu
    felixzhu
    Jan 6, 2015
    15
    自己写,要啥补啥不就行了
    jason52
    jason52
    Jan 6, 2015 via Android
    16
    不过老看das,那个大叔用的那么熟练,结果却是不怎么用插件
    harryert
    harryert
    Jan 6, 2015
    17
    推荐一个我老大@openroc的vim配置文件,我一直在用,很好用。。。
    https://github.com/openroc/or-vimrc
    jason52
    jason52
    Jan 6, 2015
    18
    @henices eregex.vim 转换了vim蛋疼的内置regexp语法,挺不错的。但是 incsearch无效了啊。google了一圈没找到解决方法。
    zeayes
    zeayes
    Jan 6, 2015
    19
    @iewgnaw +1

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

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

    推荐几个常用的插件
    目录树: nerdtree
    自动补全: neocomplcache
    注释: vim-commentary
    多行游标: vim-multiple-cursors
    还有emmet
    henices
    henices
    Jan 6, 2015
    22
    @jason52 这问题我也发现了,不过还好,一般影响不大。
    thinker3
    thinker3
    Jan 6, 2015
    23
    {windows ubuntu mac} * {vim gvim} 够折腾的
    zuyf
    zuyf
    Jan 6, 2015❤️1
    24
    数年后Wu Jie 大神又更新了exvim,文档很全,可扩展性很好,个人认为是Vim社区最佳整体解决方案(特别是对于中国人来说)
    http://exvim.github.io/
    https://github.com/exvim/main
    zuyf
    zuyf
    Jan 6, 2015
    25
    个人对几个好用的Vim插件的总结: http://zuyunfei.com/categories/Vim/
    配合exvim提供了基础的工程管理,配置好几个关键功能,日常开发中已经足够了
    coolicer
    coolicer
    Jan 6, 2015 via iPhone
    26
    最近用linux,用回vim,这回要什么加什么,不拿别人配置了。搞了一个主题,基本满足,好看。好像叫solaried,手机懒得找单词
    ayang23
    ayang23
    Jan 6, 2015
    27
    c++/c/python, 一个ycm就解决了,剩下的就是快捷键了
    spacewander
    spacewander
    Jan 6, 2015❤️1
    28
    自动补完 : 依靠插件,比如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
    KentY
    Jan 6, 2015 via iPhone
    29
    @jason52 我觉得vim的regex很强,有时比pcre 顺手
    jason52
    jason52
    Jan 6, 2015
    30
    @KentY 非贪婪{-}类似于这样的太不友好了吧,还有很多的转义。
    看对照表




    hitsmaxft
    hitsmaxft
    Jan 6, 2015
    31
    http://blog.bhe.me/blog/2014/03/23/introduction-to-vim/ 为数不多的blog之一.

    用了这么多年vim, 最后反而越来越少依赖插件, 因为大部分插件的效率很低.
    vinceguo
    vinceguo
    Jan 6, 2015
    32
    我也是倾向于少折腾的。呵呵,我懒。如上面有人说的,需要什么加什么。
    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
    9hills
    Jan 6, 2015
    33
    VIM配置有两种途径:

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

    2. 用现成的发行版


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

    推荐Learn Vimscript the hard way

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

    以前别人发的视频
    https://www.v2ex.com/t/125999
    KentY
    KentY
    Jan 7, 2015❤️1
    36
    @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
    zhimingcc
    Jan 7, 2015
    37
    能讲讲emacs最佳实践吗,个人感觉emacs用起来更顺手,虽然vim是默认安装
    xcv58
    xcv58
    Jan 7, 2015
    38
    @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
    NathanInMac
    Jan 7, 2015
    39
    虽然我也坚信适合自己的就是好的,但是 maximum awesome 确实不错https://github.com/square/maximum-awesome

    几个快捷键的改动和 tmux 的配置深得我心
    ffffwh
    ffffwh
    Jan 7, 2015
    40
    把Ctrl-g映射成Esc
    。
    。
    。
    。
    。
    。
    以后换Emacs可以少痛点
    vietor
    vietor
    Jan 7, 2015 via Android
    41
    Emacs才是终点
    bjzhush
    bjzhush
    Jan 7, 2015
    42
    多看别人的配置,写自己的配置
    这样用起来才顺手
    calon
    calon
    Jan 7, 2015
    43
    对 Vim 搜索的正则表达式不习惯,又不想折腾 magic 模式的,可以试试 escape_search(script_id=5066 )。
    calon
    calon
    Jan 7, 2015
    44
    Vim 这种可以高度个性化自定义配置的编辑器很难说有放诸四海皆准的最佳实践吧。
    在28楼建议的基础上结合别人的 vimrc 自己摸索吧。
    davansy
    davansy
    Jan 7, 2015
    45
    @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
    davansy
    Jan 7, 2015
    46
    @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
    henices
    Jan 7, 2015
    47
    @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
    KentY
    Jan 7, 2015 via iPhone
    48
    @henices 其实这些都不是问题。magic 默认设好,随用根据需要现换是vim使用很常见的情况。我2000年第一次不得不用vim,骂的不行,太非人类了。正式开始使用是从2003,2004年,到现在也有10年了。电脑没有vim是没法接受的事。除了java,所有文本编辑全在vim里。上面所谓很多技巧,对于塌下心来,打算学习,接受这个编辑器的新用户,前2月就都掌握了。都是常识性的。vim编辑快在不用想,肌肉反应。
    alexapollo
    alexapollo
    OP
    Jan 9, 2015
    49
    @iewgnaw 很棒的工程,收藏了
    @adieu 这个SO回答赞暴了
    @fullstack0xyz 找时间啃。。。
    @zuyf 看起来不错,就是赞少了点。。
    @spacewander 给的这个网址竟然是中文的,酷毙了
    ivanlw
    ivanlw
    Jul 5, 2015
    50
    可以参考一下我的配置https://github.com/tolinwei/tube-vim

    欢迎star和open issue
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1113 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 118ms · UTC 16:57 · PVG 00:57 · LAX 08:57 · JFK 11:57
    ♥ Do have faith in what you're doing.