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

VIM 有什么功能是 Sublime 无法实现的?

  •  
  •   sicongliu · 2015-12-24 03:18:24 +08:00 · 26421 次点击
    这是一个创建于 3259 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直用 Sublime Text3 ,看到网上很多 VIM fans 想必 VIM 一定有什么独特功能是 ST 无法实现的。
    花了两天时间研究 VIM, 配置好 vimrc 装好一系列插件,发现 VIM 除了模式概念是其他编辑器没有的之外并没有什么秒杀 ST 的地方。反倒是 ST 有很多比 VIM 舒服的地方比如:

    ST 速度奇快,不装插件的 VIM 在 mac 下都没有 ST 快,装了一大堆插件的 VIM 就更没法比了.
    ST 开箱功能齐全, CRTLP, CTRL+D 多选等功能虽然 VIM 可以通过插件实现但是不如 ST 原生的顺手.
    ST 插件管理 package control 比 VIM 的 vundle 更加直观方便.
    感觉 ST 搭配一些插件和可定义快捷键并不比 VIM 的命令模式差,更何况 ST 自己也有命令模式.
    ST 在 mac 下对 trackpad 和鼠标支持很平滑,在 mac 下其实多用用 trackpad 并不影响效率因为 trackpad 离键盘区域很近。
    169 条回复    2016-03-03 17:21:10 +08:00
    1  2  
    iEverX
        101
    iEverX  
       2015-12-25 00:05:48 +08:00
    vim 是开源的, sublime 是花钱的,所以转到 atom 和 vscode 了
    iEverX
        102
    iEverX  
       2015-12-25 00:06:46 +08:00
    vim 是开源的, sublime 需要买,所以转到 atom 和 vscode 了
    chemzqm
        103
    chemzqm  
       2015-12-25 00:09:42 +08:00
    vimscript....会了以后才发现编辑器还可以这么玩
    djyde
        104
    djyde  
       2015-12-25 01:37:22 +08:00   ❤️ 2
    我不明白为什么很多人说 vi 因为可以在 terminal 里使用就『完胜』 sublime.. 很想知道大家都是直接在 server 上写代码的吗?我们讨论的难道不是日常 coding 时的对比么?很多人总是喜欢先利用别人的局限假定一个场景然后说『你能这样吗?』、『你用它这样做给我看看?』

    还有人讨论打开几百 M 的文件对比速度的。我唯一因为打开文件速度慢而舍弃的编辑器是 Atom ,因为打开一个 1MB 以上的文件或者 uglify 后的 single line 文件都会慢得不能让我接受,这在日常开发都是经常会遇到的。我又很想知道大家在日常开发的时候什么会打开几百 M 的文件?这种对比真是无聊。

    我很少用 vi ,但是我相信 vi 能做的事情和 sublime 能做的事情是同样的。谁也不会比谁多或比谁少。我见过很多和我一样是写前端的,用 vi 写前端和我用 sublime 写没多大区别, syntax highlight 你有我也有。他用 vi 很开心,我用 sublime 也很开心。反正只要我们都是用两空格缩进我就开心,管你用什么 editor. :P

    用 vi 还是用 sublime ,我觉得很大部分的选择其实在于自己先接触的是哪一个,先用习惯了一个,我觉得很少人会有时间和精力再学习另一个了。我也经常羡慕用 vi 用得很 6 的朋友(因为我个人很喜欢 CLI ),但是学 vi 对现在的我来说已经没有足够的精力(我是尝试过的),而且没多大的必要了。

    说用 vi 是在装逼的人我都不知道说啥好,不过说出这种话的人如果不是出于自嘲,大概也称不上是一个 coder...
    bramblex
        105
    bramblex  
       2015-12-25 01:42:46 +08:00
    @djyde

    vim 和 sublime 不是一个层次的东西。

    当然啦,如果仅仅知识拿来编辑东西,那其实没多大差别。
    zonghua
        106
    zonghua  
       2015-12-25 03:27:13 +08:00 via iPhone
    @matrix67 为了记住快捷键,你废了多少苦心。
    KentY
        107
    KentY  
       2015-12-25 05:33:16 +08:00
    @zonghua 当你想用电脑快速打字, 你一定要熟悉键盘布局, 注意, 常用的键盘布局你要适应一段才能盲打. 你也费了苦心, 但这个值得.

    顺便, "废"是错别字, 这里纠正一下, 因为"苦心"不会白"废"
    ncisoft
        108
    ncisoft  
       2015-12-25 06:08:39 +08:00
    @djyde 回答你我不明白为什么很多人说 vi 因为可以在 terminal 里使用就『完胜』 sublime 的问题吧

    做为开发环境,同时需要一个编辑窗口,一个编译窗口(可选),一个单元测试窗口,一个服务器启动停止窗口(看日志总是要的),一个数据库操作窗口(可选),一个帮助窗口查 manual (可选),若想才在同一屏上都能操作,以我有限的知识,这只能用平铺窗口管理器或者是更简单的 tmux 才能达成目标,否则就得不停地切换窗口。

    即使是不在 server 上写代码,也不妨碍用这种方式做为开发方式。 sublime 不能在 terminal 上用,也就使得上述的使用方式无法成立, vim/emacs 则完全不同,天生适应 terminal ,所以说完胜。

    可能因为你是写前端的,体会不到这种开发模式的便利性,但如果是后端甚至是内核开发,就完全不同了。
    KentY
        109
    KentY  
       2015-12-25 06:16:24 +08:00
    @ncisoft 非常同意你的意见. 我一直用 vim, 但是 80%以上都是在终端用 vim , tmux, c-z, fg 非常顺, gvim 虽然优势很多, 比如色彩支持,一写特殊按键的映射容易度等, 但实在不愿意没事就 alt-tab 换窗口. 在这个问题回答里, 我也提到这个, 虽然是主观看法:

    http://stackoverflow.com/questions/22517896/linux-gvim-vs-vim/22520443#22520443
    ncisoft
        110
    ncisoft  
       2015-12-25 07:27:35 +08:00 via Android
    @djyde 补充,在平铺窗口管理器上用 ST ,还是可以的,可惜我没找到 winWindows 上可用的平铺窗口管理器,窗口边框实在太大,远不如 tmux 细细的一条线来切分窗口看着清爽(在 tmux 中叫 panel )
    v2014
        111
    v2014  
       2015-12-25 07:46:22 +08:00
    vim 敢叫 vim , Sublime 不敢叫 vim
    dsdshcym
        112
    dsdshcym  
       2015-12-25 08:26:17 +08:00 via Android
    @djyde
    因为题目问的是 vim 能做而 sublime 做不了的事。

    所以当然是拿 sublime 的局限来说事了,毕竟这是能比较明显地看出来的。如果这都不让说,该如何回答题目呢?
    IndexXuan
        113
    IndexXuan  
       2015-12-25 08:26:53 +08:00 via iPhone
    两个都用,近一年 vim 越来越多
    1. 按键绑定随心所欲,语法简单(最爱行内移动绑定 emacs 按键)。
    2. 和命令行窗口结合,轻量快捷。
    3. 底部直接执行命令,功能强大。
    4. 原生的 vim 模式比插件 vim 模式会强大很多!!!
    5. vim 定制性更随心所欲一些,网上 cp 几行 vimscript ,就更加一个很有趣的功能很好玩。

    不得不说,写代码重点是脑子。。。多写。。。少质疑别人的工具,对两者用户都是。。。
    sinux
        114
    sinux  
       2015-12-25 08:46:11 +08:00
    这就好比 a1 驾照和 C 驾照的区别。会 vim 去用普通编辑器也不过就是随便用用 ctrl shift 之类的问题而已,而只会 SublimeText 可算不上什么本事。你也知道 SublimeText 的便利性,便利到谁都会用,反过来则不是这样的,我见过很多人在命令行下甚至不会用 git 的默认的编辑器 nano ,这算是 CLI 下最简单的了吧?
    djyde
        115
    djyde  
       2015-12-25 09:15:25 +08:00 via Android
    @dsdshcym 我不同同意的是说『完胜』
    jemyzhang
        116
    jemyzhang  
       2015-12-25 09:31:23 +08:00
    比如说命令行使用,还有如 @sinux 所说和其他工具集成
    hei1000
        117
    hei1000  
       2015-12-25 09:36:12 +08:00 via Android
    @chemzqm vimscript ?你是没用过 Emacs 吧
    hei1000
        118
    hei1000  
       2015-12-25 09:45:12 +08:00 via Android
    @matrix67 什么是彩虹分割?
    qianlifeng
        119
    qianlifeng  
       2015-12-25 09:51:46 +08:00
    sublime 有宏么?
    ben548
        120
    ben548  
       2015-12-25 09:55:35 +08:00
    逼格
    zhaoshanhe
        121
    zhaoshanhe  
       2015-12-25 10:02:03 +08:00
    我感觉记事本用的 6 也是一样的 屌不屌还得看代码 用啥写代码完全看个人喜好
    lightening
        122
    lightening  
       2015-12-25 10:21:52 +08:00
    @chemzqm Sublime 用 Python ,怎么看都比 Vimscript 好用。
    lightening
        123
    lightening  
       2015-12-25 10:25:02 +08:00
    @gmgardus 这个现在很多人推崇。因为现在如果你用笔记本的的话,鼠标(触摸板)离你平时打字的位置其实是非常近的,移过去操作一下其实非常快。
    ispinfx
        124
    ispinfx  
       2015-12-25 10:28:35 +08:00
    Emacs 用户表示情绪稳定… Elisp 和 Vimscript ,果断前者…
    luikore
        125
    luikore  
       2015-12-25 10:37:06 +08:00
    sublime 用 python
    emacs 用 elisp
    atom 用 coffee
    vim 可以用 vimscript / lua / python / ruby / perl / tcl

    而 textmate, 可以用任何语言写插件

    http://screencasts.textmate.org/intro_to_tm_dialog.mov
    zxdhuge
        126
    zxdhuge  
       2015-12-25 10:41:12 +08:00
    @matrix67 彩虹分割是什么命令啊?
    matrix67
        127
    matrix67  
       2015-12-25 10:42:42 +08:00 via Android
    统一回复一下,彩虹分割是个插件,我绑定一个快捷键而已
    datou552211
        128
    datou552211  
       2015-12-25 10:59:53 +08:00 via iPhone
    @hackevin 当遇到堡垒机
    bramblex
        129
    bramblex  
       2015-12-25 11:04:18 +08:00
    @lightening vim 还能用 python / lua / ruby 写插件呢……无知不要拿来炫耀
    Changxu
        130
    Changxu  
       2015-12-25 11:07:03 +08:00
    就觉得 Vim 的编辑键位比较方便,没别的了。。。所以我现在用 Emacs 但是编辑键位还是 Vim 的
    bramblex
        131
    bramblex  
       2015-12-25 11:17:44 +08:00
    @luikore 其实 vim 命令行的亲和性使得 vim 可以轻松利用任何命令行工具来增强自己的功能……这点还是必将强的。

    而且 vim 打开了就是 vimscrpt 的 repl ,这跟支持 xxx 语言的插件根本不可同日而语。
    zonghua
        132
    zonghua  
       2015-12-25 11:40:34 +08:00 via iPhone
    @KentY 谢谢。输入法问题,出糗。
    xuboying
        133
    xuboying  
       2015-12-25 11:48:50 +08:00 via Android
    vvim 的 Python 补全没有 vs 做的好,所以我用 vs 啦
    bikegl
        134
    bikegl  
       2015-12-25 12:34:19 +08:00
    vim 已经内化到我的系统中,用的时候感觉不到它的存在
    zzn
        135
    zzn  
       2015-12-25 12:53:27 +08:00
    彩虹分割是什么鬼?
    ncisoft
        136
    ncisoft  
       2015-12-25 13:41:37 +08:00
    @KentY 看了你的 retmux ,非常棒,目前 tmux 1.9a 之后支持 pannel 最大化和恢复, prefix c-z 即可,很好用
    ncisoft
        137
    ncisoft  
       2015-12-25 14:10:16 +08:00
    更爽歪歪的是, tmux 可以配置成 vim keybind 方式使用, copy/paste 用一样的方法。没有一个工具,具备 vim keybind 这样广泛的病毒特征。学会 ST 的 keybind 只能自己暗爽,换个环境就得苦逼地训练新的肌肉记忆。说句透露年龄的话, 20 多年前,我上大学一上机就用的是 vi ,一色的 vt 终端,没想到到了现在基本用法还没过时,站在学了不过时的角度来说,到迄今为止, vim 完胜 ST 。

    从 IDE 角度来说,我用过感觉最好的是 Ietellij IDEA ,重构不要太爽利,自动补全这些就不用说了,写 java 必备啊,写 c 、脚本语言这种类库不那么复杂、类名、变量名不那么冗长的, vim 挺好用。补说一句, IDEA 也提供 vim keybinding
    zlandjj
        138
    zlandjj  
       2015-12-25 14:30:32 +08:00
    vim 不用鼠标。 尤其是服务端码农。
    zlandjj
        139
    zlandjj  
       2015-12-25 14:42:48 +08:00
    为什么我在这里回答问题还减分呢? vim 确实是可以不用鼠标的啊。
    luikore
        140
    luikore  
       2015-12-25 14:45:38 +08:00
    @bramblex 调用命令行工具都没问题的.

    textmate 不同的地方是命令脚本通过 shared file descriptor 和编辑器通信, 所以在任何语言里都能控制编辑器行为, 而其他编辑器最终还是得写宿主语言才能控制编辑器行为

    interactive shell 只是把 terminal 的功能复制到编辑器中而已, 不太符合 TextMate 的 unix 哲学, 要做插件也可以像 r-console-rdaemon 这么做
    bramblex
        141
    bramblex  
       2015-12-25 15:03:07 +08:00
    @luikore

    emacs 我不熟。那你一定没有听过 vim 的 remote 模式了
    bramblex
        142
    bramblex  
       2015-12-25 15:04:38 +08:00
    @luikore

    vim / emacs 比较像一台通用计算机,反正最终都是在他们的 CPU 之上跑。
    TextMate 像一台可以 ssh 过去的小霸王……
    luikore
        143
    luikore  
       2015-12-25 15:38:01 +08:00
    @bramblex 相反, 我对绝大部分编辑器都熟...

    我平时是 vim 和 textmate 混用, vim 的一个重要优势是用户群比 textmate 大, 有很多脑洞插件, 但 remote 模式不是我用 vim 的原因...

    而主要用 textmate 是因为用户体验比较好, 例如字体渲染, 动画效果等, 插件也最容易制作 (vim 和 emacs 里我也写过一些, 但并没有在 textmate 写插件命令的体验好)
    bramblex
        144
    bramblex  
       2015-12-25 15:46:42 +08:00
    @luikore

    你说的这些就不在讨论范围了,要说用户体验,怎么样也轮不到 vim 了
    slrey
        145
    slrey  
       2015-12-25 17:21:15 +08:00
    @ncisoft 非常同意。 man 手册里上下移动也是 jk ,感觉 vi 的基因已经融入到系统里了。
    KentY
        146
    KentY  
       2015-12-25 17:29:33 +08:00
    我就不回复具体人了.
    有朋友说道触摸板, 鼠标, 离键盘近所以效率也不低.

    这些其实也对, 但是还是说, vim, emacs 这些编辑器, 的确是支持鼠标的, 可是他们优势不是对鼠标能做什么高级功能. 你用好了别说手离开键盘, 手都不想离开键盘的 home row. 不是说这就能多快多有效率, 只是看问题的角度不同.
    KentY
        147
    KentY  
       2015-12-25 17:35:22 +08:00
    @ncisoft 谢谢你试用 retmux 其实两年多前在我写这个的时候, 已经有一些类似功能的应用了, 甚至提供更多的功能, 比如进程的恢复等. 但是我想要个备份, 恢复起来很快很方便的. 一些软件要自己手写一个配置文件, 然后 tmux 起的时候加载那个, 形成初始的布局和目录啊等. 为什么不能在 tmux 用的时候觉得这个布局或状态我以后会用, 一行命令就存了. 呵呵. 就跟这个帖子争论的一样, 各人使用习惯和角度不同吧.

    另, 你有个笔误, 你说的 tmux 功能应该是 prefix + **z**, 不是 prefix + c-z, 因为 c-z 怎么都会把 tmux 给扔后面去;)
    mozartgho
        148
    mozartgho  
       2015-12-25 17:38:30 +08:00
    vim 的搜索非常难用,我非常喜欢 SublimeText 和 notepad++的搜索功能,搜索结果直接显示在一个 panel 里,单击结果跳转到对应行
    KentY
        149
    KentY  
       2015-12-25 17:40:50 +08:00
    @ncisoft 我也是用了 15+年的 eclipse, 换到最后这个公司统一要求 intellij, 硬着头皮换了以后发现, 200 多欧的价格不是白给的, 确实比 eclipse 厉害, 只是没有 vim 真没法顺利的用.幸好有 idea-vim 的插件, 虽然和 vim 自身无法比, 但比 eclipse 里的一系列插件好太多了.

    还有在 intellij 类的 ide 里, 配置好外部编辑器 vim, 也觉得天空又亮了一些.
    KentY
        150
    KentY  
       2015-12-25 17:44:23 +08:00
    @mozartgho :h vimgrep :h quickfix :h location-list :h :g
    搜索是文本编辑器最最常用的功能之一了, 作为 vim 这种那么多人用的(先不说好坏)编辑器, 搜索怎么会"非常难用" ? 你说呢? 搜索的方法真太多了. 你说的那个放到一个 panel 里跳转的搜索大概 20 年前就没问题了.可能你没发现.. 还有比较常用的, 比如搜索一个字符串, 把包含这个字符串的所有行都 copy 出来等等这些...都是 vim 默认就带的了
    billlee
        151
    billlee  
       2015-12-25 19:50:41 +08:00
    less
    vim
    readline vi mode
    tmux vi keybinding
    都能用同一套快捷键
    xuboying
        152
    xuboying  
       2015-12-25 22:14:28 +08:00
    借这个帖子的人气,请教一下如何让 vim 的 wxpython 匹配做的和 visual studio 一样好
    毕竟可能会到 linux 下开发,就没有 vs 用了
    https://pbs.twimg.com/media/CW1PtWTUEAAsQco.png:large
    ncisoft
        153
    ncisoft  
       2015-12-25 23:27:32 +08:00 via Android
    @billlee 谢谢普及。我一直都是用 more ,英文博客总是用 less ,原来如此
    wweir
        154
    wweir  
       2015-12-25 23:56:56 +08:00 via Android
    @sinux 哈哈哈😄,习惯了 vi , nano 对我而言就是一种折磨
    Arnie97
        155
    Arnie97  
       2015-12-26 00:06:51 +08:00
    @billlee readline 默认是 emacs …
    作为 vim 党,好不容易学会了这套热键,不久就发现,原来还有 vi mode …
    Arnie97
        156
    Arnie97  
       2015-12-26 00:11:02 +08:00
    @wweir 没错,每次装好系统都要 pacman -R nano …
    billlee
        157
    billlee  
       2015-12-26 00:16:33 +08:00
    @Arnie97 可以 export EDITOR=vim 的。。
    tracyone
        158
    tracyone  
       2015-12-26 00:33:41 +08:00 via Android
    @mozartgho easygrep 插件达到同样的效果,或者 ag.vim 更快的搜索速度,需要安装 ag 命令。他们当然都支持正则……简单映射下即可,可参考我配置。
    @djyde 有部分职业的人的确实在服务器上写代码,比如说我啦,嵌入式 linux 。
    Earthman
        159
    Earthman  
       2015-12-26 00:34:54 +08:00 via Android
    你们那么叼,怎么没人写高阶 vim 教程
    ncisoft
        160
    ncisoft  
       2015-12-26 00:42:03 +08:00 via Android
    @Earthman 没义务+没心情,叼不
    alvin2ye
        161
    alvin2ye  
       2015-12-26 00:47:14 +08:00
    @luikore 我们居然用法一样.

    看代码时我大多是 Textmate 写代码 macvim
    tracyone
        162
    tracyone  
       2015-12-26 00:48:03 +08:00 via Android
    @Earthman 你看了这么多。回复你也知道,用 vim 最基本就是记住众多按键,然后练熟悉,简单改改配置,用用插件,这算低阶咯,高阶就直接写插件或者给 vim 贡献代码,给你几个链接,看看程序员多疯狂。
    https://github.com/Shougo
    https://github.com/tpope
    Epirus
        163
    Epirus  
       2015-12-26 03:01:10 +08:00
    vim+tmux =♡(IDE)

    Undotree macros goyo(like ai-writer) nvim(terminal ) ...

    to be lazy~
    Evovil
        164
    Evovil  
       2015-12-26 09:08:04 +08:00
    @djyde 话说的不要这么绝对。。就同 @tracyone 一样, 1 我就在服务器写代码,编译组件和调试 2 我也做嵌入式平台,涉及到交叉编译,没有 vim/Emacs ,怎么写代码??
    这还不是关键,怎么调试?
    vim 和 gdb 配合仿真器调试最好不过了
    另, linux 内核调试, linux 驱动调试和编写? Sublime ?。呵呵

    开着 windows 拿鼠标在花花绿绿的 os 下写代码的,不要把你们的想法强加在只有个黑屏幕满屏幕密密麻麻字写代码的人身上。。
    所谓神器
    就是。。。。。。。
    在什么都没有(甚至鼠标)的情况下,可以写代码,编译,调试。
    上手之快,效率之高。

    我曾经 ssh 到服务器就用 vim 和 ipdb 紧急调试了服务器发布的源码。 sublime ?
    dalang
        165
    dalang  
       2015-12-26 10:25:18 +08:00 via iPhone
    要想挑起编辑器的圣战,我觉得还轮不到 ST 来插一脚吧
    bugsnail
        166
    bugsnail  
       2015-12-26 10:42:53 +08:00
    楼主, 你用 sublime text 和 vim 打开一个 40M 以上的文本文件试试, 别说遇不到, log 大于 40M 的有的是, 如果加上其它操作, 呵呵

    各有各的优点, 只是基本功 VIM 是无话可说的
    yan97ao
        167
    yan97ao  
       2015-12-26 14:28:15 +08:00
    帮助乌干达的小朋友
    zhaihaifeng123
        168
    zhaihaifeng123  
       2015-12-26 17:17:25 +08:00
    @djyde 介绍一下, ICer 确实都在 server 写代码和工作的, vim 是基本工作技能之一。
    ghostheaven
        169
    ghostheaven  
       2016-03-03 17:21:10 +08:00 via Smartisan T1
    在没有 ui 的服务器上
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:13 · PVG 13:13 · LAX 21:13 · JFK 00:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.