如何更好的学习 vim?

2015-12-02 09:12:36 +08:00
 yx30
用惯了 IDE ,有了很多不良的码字习惯,比如习惯性用鼠标点击,不自觉的用上下左右键等等,初识 vim ,感觉 vim 的学习曲线还是比较陡峭,如何才能更好的学习 vim.求各位分享一下自己学习 vim 的经验
12336 次点击
所在节点    Vim
112 条回复
kukat
2015-12-02 16:59:21 +08:00
@young 求矢量图
fishioon
2015-12-02 17:31:20 +08:00
@dogfeet 写的不错,不过关于括号那个我推荐 auto-pairs 插件,输入左括号会自动输入右括号并且光标在中间,删除时也会配对删除,很不错
young
2015-12-02 17:38:25 +08:00
@kukat 没有, 我找的这个已经是最大的了
话说这个图是收费的...
FAB
2015-12-02 18:22:10 +08:00
为什么不从玩 Vim-Adventures 开始呢?
behappy
2015-12-02 18:29:38 +08:00
用了一年 sublime text ,最终决定还是回归 vim 。
也没啥别的想法,就是在服务器上没别的选择,只能用 vim 。
KyleMeow
2015-12-02 18:47:36 +08:00
用到什么功能,搜索即可。然后多用就记住了。熟能生巧。
demobin
2015-12-02 19:18:18 +08:00
@bramblex 既然你自己是 VIM 大神,为什么要禁止你的小伙伴用 VIM ?难道有什么编辑器可以像 VIM 一样,一条指令替换全局字符串、替换指定行数内字符串、某 V 区域内字符串、替换某一列字符串等等在写代码时其实很好用的功能吗?
workwonder
2015-12-02 19:39:12 +08:00
直接 ssh 到服务器编码的还是别拿出来说事儿了,感觉老土的样子。
而且神奇的是竟然认为没有别的选择。
llbgurs
2015-12-02 19:43:21 +08:00
把自带的 vimtutor 敲几小时

然后后面所有文本编辑都不要用 方向键
demobin
2015-12-02 19:50:18 +08:00
那些说 VIM 是用来装逼的也是笑死人了。你的 IDE 可以一下跳到文件底部?跳到指定行数?跳到匹配的括号?你的 IDE 可以比 VIM 更快速查找?任意区间替换任意字符?你的 IDE 可以一下在一列上添加字符串?在多行行尾添加字符?你的 IDE 可以自动添加文件头?自动添加函数头?你的 IDE 可以一下插入系统时间、当前目录?可以手不离开键盘运行程序验证代码?可以在不认识的字符串上按下 SHIFT+F 就查英汉、日汉字典?自己不喜欢不爱用,为什么要说用 VIM 就是装逼?为什么还不让别人学?
wizardoz
2015-12-02 19:52:28 +08:00
作为一个 emacser ,我认为很多东西其实是习惯了就不想改了。前段时间用了两个星期的 sublime3 ,发现并没有真的有多好,反正那些功能大家都有,只是习不习惯的问题。所以后来还是回归 Emacs 了。
但是我也并不是在装逼,因为我从来不会向别人安利我使用的工具。偶尔会有人跑过来“哇塞,你用的这个是什么?”这种时候我通常懒得解释,说不清楚。
其实 IDE 和 Emacs 、 VIM 不是一类东西。有些人工作只是写代码,不需要也不喜欢捣腾其它东西,还是 IDE 比较好。但是如果经常写多种不同的语言,或者编辑各种文档、系统配置文件,再加上还要经常到不同的服务器远程编辑。我相信 IDE 并没有什么优势吧?
至于 Sublime ,我觉得这个东西跟 Emacs 、 VIM 就是一类东西。都是要各种折腾各种安装插件。无非就是界面更现代一点罢了。对于熟悉 Emacs 和 VIM 的人来说,没必要去花精力学习一个功能差不多的东西。如果是新手,直接学 Sublime 也无不可。
突然想起来, Sublime 在 Linux 下不支持中文输入! Sublime3 依然不支持!这是我摒弃 Sublime 的主要原因。所以说大家半斤八两,都是有长有段的。
bramblex
2015-12-02 20:51:42 +08:00
@demobin

——引用 ——

那些说 VIM 是用来装逼的也是笑死人了。你的 IDE 可以一下跳到文件底部?跳到指定行数?跳到匹配的括号?你的 IDE 可以比 VIM 更快速查找?任意区间替换任意字符?你的 IDE 可以一下在一列上添加字符串?在多行行尾添加字符?你的 IDE 可以自动添加文件头?自动添加函数头?你的 IDE 可以一下插入系统时间、当前目录?可以手不离开键盘运行程序验证代码?可以在不认识的字符串上按下 SHIFT+F 就查英汉、日汉字典?自己不喜欢不爱用,为什么要说用 VIM 就是装逼?为什么还不让别人学?

—— End ——

我先确定一下,你真的不是在黑 VIM 或者钓鱼?

好吧,我假设你不是高端黑,也不是钓鱼……那我只能说,无知真可怕!
d0o0g
2015-12-02 22:32:21 +08:00
@workwonder 怎么会老土呢?使用场景使然

服务器上脚本有 bug ,你会把程序 scp 回本地吗?
我是不会,服务器上配置好 vimrc ,直接打开调试就完了。
谁还拷回本地用 ide ?多此一举

vim 在服务器上,我在异地的任何机器上都能调试编写代码
fallwithme
2015-12-02 22:50:15 +08:00
其实,学 VIM 的话,首先你要改变自己的思维方式......

既然都是程序员,应该知道命令式编程,和声明式编程吧。一般的编辑器就是命令式编程,你需要告诉它一步一步怎么做,而 VIM 是声明式编程,你只需要告诉它你要什么结果....

比如,面对这样的一行代码:

print "Hello world"

你想把引号里面的 Hello world 换成 Goodbye ,假设此刻光标在 Hello 和 world 中间,你应该怎么做呢?

在一般的编辑器里,你需要做的事是,移动光标到 world 后面,然后按删除键把字母一个一个删掉,然后重新敲新的单词,因为编辑器本身对你录入的内容一无所知,只会做移动光标和删除一个字母和添加一个字母这几件事。

然而在 VIM 里,你需要做的是敲出这样几个字母:

ci"Goodbye

翻译成中文就是——嗨,给我把引号里的内容换成 Goodbye
翻译成英文就是——(c)change (i)inside (") Goodbye

为什么能这么下命令?因为 VIM 对你写的内容有感知,它知道 print 是一个单词,也知道 Hello world 在一个引号内部。所以,你只需要学会怎么把你想要的结果表达出来就行了, VIM 自己知道该删掉哪几个字母。

同理,要想把 world 这个单词替换掉怎么办?

ciw

能猜出是啥意思了吧?(c)change (i)inside (w)word

这就是 VIM 的基本概念了,明白了这个,再记那些命令就容易多了,甚至,你都可以自己猜命令了。比如你猜替换掉括号内的内容的命令是什么,就是 ci(或者 ci)?又比如,你知道了删除命令是 d ,那么,你猜删除掉一个单词的命令是什么,就是 diw 。很简单吧....



因为,一般的编辑器是
DemoJameson
2015-12-02 23:01:58 +08:00
凡是遇到耗时的操作都停下想一想有没有简易的做法
bohrasd
2015-12-02 23:11:57 +08:00
人家想学就让人家学,你怎么知道人家是为什么要学的?你用不到别人就用不到?
kqz901002
2015-12-02 23:18:42 +08:00
@iniwap 很多时候并没有桌面
dsdshcym
2015-12-02 23:25:08 +08:00
分享一句前几天看到的评价

文本编辑器就要用 Vim, Emacs 这种古老的,你能想到的大部分文本操作都已经在这三四十年里被它们的用户想到过,并且很有可能实现过了。
Email
2015-12-02 23:25:47 +08:00
推荐一本书

Vim 实用技巧
Echoldman
2015-12-02 23:52:25 +08:00
我的方法是:“想要同时编辑多行”用 vim 应该怎么做,然后 google 解决。时间长了就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/240464

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX