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

给 VIM 新手建议

  •  1
     
  •   join · 2015-12-26 21:05:21 +08:00 · 5308 次点击
    这是一个创建于 3255 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天看到一个帖子,一个哥们问新手如何学习 VIM 的建议。底下的人都回复:“无他,唯手熟尔”。一个工具用熟悉以后确实会用得很好。但是我发现身边有的人用 VIM 用了很多年,却连一些最基本的操作都不大会,有些甚至连 hjkl 都不会使用。这个问题的出现真的不是可以用手熟来解释了。我就我自己这几年来使用 VIM 的一些心得和观察给新手提供以下建议。

    认识 VIM

    我们都知道 linux 的哲学是一个程序只做好一件事情,并做到最好。 wc, cat,tail, head, grep, ls, cd 。这些工具是对这个哲学的最好诠释。 VIM 也符合这个哲学, VIM 经过这么多年的发展依然没有太多的变化,变化的只是外部各种各样越来越强力的插件。 VIM 本身还依然保持娇小的身材,没有去解决除了编辑文本以外的问题。

    网上的教程全部都是错的

    网上有各种各样的教程都在介绍如何将 VIM ‘伪装’ 成一个强力的 IDE 。这些文章表面上看起来是教程,实际上是作者在告诉别人:“看,我这辆坦克多么多么厉害,它能发射各种各样的导弹”。这些教程除了教你把一个工具搞复杂以外,并没有带来任何有用的东西。 VIM 它本身不是 IDE ,它距离 IDE 还差很远。但它能让用户可以使用各种各样的语言来写代码。这也是为什么我现在还在用 Ctrl+N 来做补全而不使用各种强力的补全插件来做补全的原因。 VIM 它本身也并不完美,插件系统也有各种各样的问题,这么多年过去了连中文输入法都没有完美支持。但做为一个写代码的工具它已经做到了一个编辑器的极致了。 VIM 最好的教程是它自带的 vimtutor ,很少有软件能把教程做得这么好。 vimtutor 里面提及的那些操作几乎涵盖了 VIM 平常 90% 的操作,反复跟着教程练习几遍就能完全使用 VIM 了。可惜我见过的大部分的 VIM 用户都没有一开始去使用 vimtutor 进行入门练习,这就是我们经常会见到一个使用 VIM 好几年的用户居然连 hjkl 都不会的原因。

    让工具适应你

    VIM 有各种各样的插件和网上其他人开放出来 vimrc 配置文件。这些现成的东西是使用是有成本的,你必需要先学会使用这些东西才能让工具适应你。直接使用别人的 vimrc 与现成的插件包是非常不可取的,它们会把你的工具彻底搞复杂让你没法适应。理想的状态应该是理解 vimrc 文件每一行配置的含义,然后根据自己的习惯来做调整。需要什么插件去网上搜索,完全学会一个插件后再添加另一个插件。

    总结:

    1.认识 VIM 的局限,他能干什么,干不好什么。
    2.入门请认真仔细使用 vimtutor 命令进行入门练习,最好多重复练习几遍。
    3.拒绝别人现成做好的东西的诱惑,慢慢的打造属于自己的工具。

    29 条回复    2015-12-28 11:43:47 +08:00
    zwy
        1
    zwy  
       2015-12-26 21:27:13 +08:00   ❤️ 1
    VIM 这类工具的学习路径,和代码重构的目标是一致的
    重复 3 次或者以上的操作,必定有其抽象解决方法
    只是看用家有没有这个心态去总结

    有人用了好多年 notepad 并安于现状,就好像总有一部分人写 10 年一模一样毫无长进的代码
    join
        2
    join  
    OP
       2015-12-26 21:32:46 +08:00
    @zwy 你说得很对,有时候我觉得一个软件做得好不好就在于复杂度的控制。
    join
        3
    join  
    OP
       2015-12-26 21:36:15 +08:00
    我写这篇文章的思路跟写代码是很像的,在使用别人现成做好的东西一定要控制住诱惑,搞明白它是怎么回事,否则别人做的东西一旦出问题将会给你带来麻烦。
    klmd99
        4
    klmd99  
       2015-12-26 21:54:03 +08:00
    我只会 hjkl ,在 sublime 下好方便
    klmd99
        5
    klmd99  
       2015-12-26 21:55:55 +08:00
    还有 o
    dsdshcym
        6
    dsdshcym  
       2015-12-26 22:10:31 +08:00
    @zwy 支持这种说法, Vim 技能的提高就是对自己操作的重构
    bramblex
        7
    bramblex  
       2015-12-26 22:11:33 +08:00
    我只会对目的是写代码而不是玩 vim 的新手这么建议。

    然而像我这样把 vim 当玩具的并且玩得很开心的。当然是爱怎么折腾怎么折腾啊 /w\
    比如我就玩得很开心 https://github.com/bramblex/BlxVimrc
    lululau
        8
    lululau  
       2015-12-26 22:14:01 +08:00
    学习 + 常用吧,推荐个学习材料: http://learnvimscriptthehardway.stevelosh.com
    chemzqm
        9
    chemzqm  
       2015-12-26 22:56:48 +08:00
    当年忽悠我用 vim 的同学早就投奔 sublime 了,用他的话说就是浪费好多时间。
    他就是个玩 vim 插件的, vimrc 也都是网上下载的,只追求功能强大的同学还是用好自己的 IDE 吧,为了装个逼折腾 vim 并不值得。
    学习 vim 不仅是手指练习,还包括熟练使用 vim 完善的帮助文档,理解 vim 里面 buffer , quickfix , location list , patterns 等等基础概念,最终你才能学会用 vim 的方式去思考代码编辑。
    现在的一些流行 vim 插件总喜欢加上各种乱七八糟的功能,使用结果就是各种搞不清楚的命令,难以预料的结果,以及 vim 运行效率的降低,所以我不得不安利几个简洁的插件:

    简单配对: http://www.vim.org/scripts/script.php?script_id=2339
    一键注释: https://github.com/chemzqm/mycomment.vim
    tab 补全: https://gist.github.com/chemzqm/287b0e98560e2e0a1491

    都没几行代码,会些 vimscript 就可以自己改了
    chemzqm
        10
    chemzqm  
       2015-12-26 23:10:40 +08:00
    话说新版的 macvim 修复了 noimd 选项,设置后会自动禁用你的输入法,防止误操作,但是输入中文还是蛋疼。
    vim 的中文翻译感觉很一般,经常各种莫名其妙,看不懂的时候建议看英文文档。
    lufengd3
        11
    lufengd3  
       2015-12-26 23:40:13 +08:00
    "让工具适应你" 这个总结的不错
    congeec
        12
    congeec  
       2015-12-26 23:50:18 +08:00
    那些所谓的教程真是给 vim 用户抹黑。。。。
    asj
        13
    asj  
       2015-12-26 23:58:11 +08:00 via iPad   ❤️ 1
    Vi 的最核心特点不在于更高效,而是更抽象。与其说是一个文本编辑器,不如说是一门操作文本的语言。
    所以我认为程序员确实应该学学 Vi ,不在于这样写高效,而是多了一个视角把敲代码这件事本身代码化。
    Andiry
        14
    Andiry  
       2015-12-27 00:18:13 +08:00 via Android
    不懂为什么用 vim 就一定要用 hjkl 。上下左右有什么问题?
    ThomasZ
        15
    ThomasZ  
       2015-12-27 00:22:14 +08:00 via iPhone
    @Andiry 上下左右离主键区太原,右手在键盘的移动太大, hjkl 就不用你去移动了,能更迅速
    Geeker
        16
    Geeker  
       2015-12-27 00:23:22 +08:00
    嗯,我也喜欢用各种工具提升效率,但又不希望被工具绑架和奴役
    Evovil
        17
    Evovil  
       2015-12-27 00:45:17 +08:00
    @Andiry 手脱离键盘, 远
    同理 emacs ctrl+CFPN
    Epirus
        18
    Epirus  
       2015-12-27 00:59:30 +08:00
    不要随便给人建议~ share your .vimrc
    JerningChan
        19
    JerningChan  
       2015-12-27 01:08:32 +08:00
    vim 對中文直接不好?我並沒有發現呀...
    不知你是不是又因爲用 win 下邊的 vim...
    反正我在 mac 上有時都直接用 vim 來寫中文文檔...
    而且一點問題都沒有...
    我覺得呢,但一樣東西,你在深入了解過後,再去玩的話,會有不一樣的感覺
    linux40
        20
    linux40  
       2015-12-27 10:01:57 +08:00 via Android
    对,所以我不用 vim 。。。
    xcodebuild
        21
    xcodebuild  
       2015-12-27 15:37:47 +08:00 via Android
    @ThomasZ 讲道理的话明明是因为 vi 时代键盘没有方向键。。。
    limbo0
        22
    limbo0  
       2015-12-27 17:06:44 +08:00
    除了在终端里用 vim 真找不到用 vim 的理由了
    hailongs
        23
    hailongs  
       2015-12-27 18:57:04 +08:00 via iPhone
    @limbo0 比如你有一个很大的工程,这个工程团队都在服务器直接用 vim 编写,然后各种第三方库和环境本地也不好配,本地是 win ,服务器是 linux ,你不用 vim 用什么
    dxcqcv
        24
    dxcqcv  
       2015-12-27 19:07:57 +08:00
    vimrc 可以保存替换,但是每次重装系统都要重新安装插件,有点无奈,有没有脚本可以一键安装呢?在 win 下
    limbo0
        25
    limbo0  
       2015-12-27 19:17:51 +08:00
    @hailongs

    你可以开个 samba 服务, 在本地 ide 里修改啊

    要是用 vim 写 java 岂不是蛋疼啊
    spacewander
        26
    spacewander  
       2015-12-27 19:56:32 +08:00   ❤️ 2
    又到了安利 vimscript 教程的时间了。
    http://learnvimscriptthehardway.onefloweroneworld.com/
    spacewander
        27
    spacewander  
       2015-12-27 20:04:29 +08:00
    @dxcqcv 看看 https://github.com/wklken/k-vim/blob/master/install.sh
    他的步骤是:
    1. 备份旧配置
    2. 链接新配置(你也可以直接覆盖)
    3. 启动 Vim ,使用 Vundle 安装插件
    4. 编译 YouCompleteMe (运行 YCM 提供的安装脚本)

    你可以用 bat 或者 python 实现同样的功能。
    join
        28
    join  
    OP
       2015-12-28 00:16:48 +08:00
    @limbo0 是的,会很蛋疼,用来写 C++ 项目也很蛋疼。
    hailongs
        29
    hailongs  
       2015-12-28 11:43:47 +08:00
    @join c++路过
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2451 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:53 · PVG 23:53 · LAX 07:53 · JFK 10:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.