搜索

首页  >  问答  >  正文

如何高效使用Vim

新手刚接触Vim,希望大虾们推荐一些入门的练习教程,现在还只是把Vim当成普通编辑器使用..还有,按Esc回到普通模式好像有点麻烦,要伸到键盘的左上角,有没有什么简便的方法呢?先谢谢了!

PHP中文网PHP中文网2774 天前1621

全部回复(18)我来回复

  • 为情所困

    为情所困2017-05-16 16:44:38

    用vim 快两年了 看过教程也不少,总的来说还是得自己多练习,当自己觉得有需要的时候,再添加功能。这里分享个看过的最好的教程,出自贴吧的某个朋友,写的很好

    学会盲打

    配置文件先从最简开始,在 伍级 前别考虑配置插件,千万别硬背命令,千万别直接取用别人的配置文件
    基本还是长时间待在 insert mode 下,会觉得 vim 也不过尔尔,也不好用,

    这个时候,编辑效率可能比用原来的一般编辑器还低,别人问使用什么编辑器时,
    多半会回答:vim 再配一个 nano, kate, kwrite, gedit, geany 或其他 IDE 之类的

    养成习惯待在 normal mode(normal 不是白叫的),只有输入时才进入 insert mode,输入完马上 <ESC>
    学习 normal mode 下的移动命令,这个时候输入文字标准流程:

    1. normal mode 移动命令准确定位光标(记住,搜索命令也是移动命令)
    2. 进入 insert mode 编辑(进入 insert mode 别只用 i,要习惯视乎情况,使用 I a A o O s C)
    3. <ESC> 返回 normal mode

    这个时候,编辑效应会恢复到和你之前用的普通编辑器一样,甚至有少量提高

    学习什么是 operator(命令 d y c 等),什么是 motion(所有能移动光标的命令,h j k l w e f t / ? 等等),
    学习 operator + motion 的方式,如 ct. (将当前光标到 . (点) 之间的内容删除并进入 insert mode 准备修改)
    学习基础的 Ex 命令,:s 什么的

    这个时候,编辑效率开始明显提高,在用其他一般编辑器时,会开始觉得不习惯和低效率

    学习 text-objects,知道 operator + text-objects 的方法,可进行手术般精准的定位和修改,
    既然你主要用在 c/c++,举一些在这个情况下有用的例子:

    ci" (由 change operator 和 text-object i" 组成)

    这个命令会找到当前光标所在行的下一个" 括起来的字符串,清除引号里面的内容,并进入insert mode 以方便修改
    用起来比解释起来简单,你可用const char* hello = "Hello world ."; 类似这样的代码来测试

    yaB (由 yank operator 和 text-object aB 组成)

    这个命令会将当前光标所在的代码块({} 括起来的内容,包括花括号本身)复制到默认register,
    方便在其他地方用p 贴出来(当然,写代码不鼓励copy and paste),你可用用任何一个{} 来测试,然后找另外一个地方p

    gUiw (由 make uppercase operator 和 text-object iw 组成)

    这个命令会将当前光标所在的 word 全部变成大写
    如将 max_size 变成 MAX_SIZE

    这个时候,开始知道为什么 vim 精确高效,而且并不是因为全键盘无需鼠标

    习惯 operator + motion 后,发现 . 命令很好用,多注意使用可重复的命令组合
    练习使用书签定位,q 记录宏,使用多个 register,使用 args,使用 buffer
    使用其他的 Ex 命令

    这个时候,想不起没用 vim 之前的日子是怎么过来的

    开始 map 经常反覆使用的命令,开始写 vimscript,开始知道自己需要什么样的插件
    试推荐几个:
    pathogen 或 vundle,tagbar, CtrlP, Gundo, UltiSnips,surround,Syntastic,Conque,ack.vim,vim-commentary,fugitive(如果是 git 用户)
    还有不少,但多对 c/c++ 没直接帮助,就不提了

    这个时候,对其他编辑器提不起兴趣,或许 emacs 除外

    拥有完全个人化的 vimrc,基本进入化境,成为江湖上的传说
    常有旁人观察你编辑后,激起雄心壮志想要学 vim,尝试几个小时候因为觉得热键太不"人性化”而放弃,
    但偶尔会向人提起他见过江湖上有你这么一号人物

    回复
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 16:44:38

    我使用vim有一年了.日前正要写一个vim的cheat sheet,就提前在这里写下吧。

    首先 vim != gvim

    1.怎么编辑

    任何时候按下ESC键会进入普通模式.普通模式下可以按下: 来输入命令.

    普通模式按下i或a 进入插入模式,这时你可以编辑文本。

    2.简单编辑

    • 移动光标 :你可以直接用方向键来移动光标, 更vim些的做法是hjkl
    • 保存文件,普通模式下 :w .退出编辑 :q ,强行保存 :w! 强行退出: :q!
    • 撤销操作 :u 或者普通模式下按下u

    3.更快的编辑

    现在你可以用vim写东西了.

    我们需要更快的编辑

    1.快速的定位光标:

    • ^ 跳到行首 (类似功能键Home)
    • $ 跳到行尾(类似功能键End)
    • :n 跳到第n行
    • :$ 跳到最后一行

    2. 快速的编辑:
    在普通模式下:

    • dd 删除一行
    • yy 复制一行
    • p 粘贴
    • r 单个字符替换

    3. 更精细的粘贴复制:

    • m,nd - 快速删除第m到第n行 (delete)
    • m,ny - 复制第m到第n行 (yank)
    • m,nmt - 第m行到第n行剪切到第t行(move)
    • m,ncot -第m行到第n行复制到第t行(copy to)

    4. 搜索
    普通模式下按下 / 向下搜索, 按下?向上搜索
    5.对齐
    gg=G 快速对齐整个文件
    6.标签操作

    • :tabnew mytab 新建一个标签mytab
    • :tabn 跳到下一个标签
    • :tabp 跳到上一个标签
    • 用gt或gT在普通模式下跳转到下一个和上一个标签

    7. 切割窗口操作

    • :split 水平方向切割一个窗口
    • :vsplit 竖直方向切割一个窗口
    • 用Ctrl-w+方向键 在各个切割窗口之间切换。

    4.让vim更懂你

    有没有注意到我们以上一直没有提到vimrc和插件。

    现在到时候了。

    比如,我们coding时喜欢显示行号:命令模式下:set nu或者 :set number

    关于vimrc, 有很多值得研究商讨的地方,你可以参考下我的vimrc, 我都进行了详细的中文注释

    5.关于插件和主题

    vim 的配色有三个比较出名,solarized , molokai , badwolf

    关于vim 的插件,只有这么几句需要说:

    • 一定要使用vundel来管理插件。
    • 不要修改别人的插件,要么你就自己fork了修改,然后bundle你的插件。
    • 可以研究下怎么用git submodule来管理你的插件。

    好了,吃饭去。。到此。

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 16:44:38

    无他,唯手熟耳。

    " Arrow keys are evil
    map <up>    <nop>
    map <down>  <nop>
    map <left>  <nop>
    map <right> <nop>

    另外,Ctrl-[ 也可以退出编辑模式。

    回复
    0
  • 天蓬老师

    天蓬老师2017-05-16 16:44:38

    嗨!我提供一个非常棒的方法:
    玩 vim 游戏!

    如果你是使用 Ubuntu 系统,请输入:

    1. sudo apt-get install vimtutor
    2. vimtutor

    或者透过一个很酷的网页 vim 游戏:

    vim 冒险家
    http://vim-adventures.com/

    回复
    0
  • 为情所困

    为情所困2017-05-16 16:44:38

    hey~! 我实在是不知道怎么用 vim, 只有我的手知道. (熟能生巧)

    不喜欢用 esc 可以用 <c-c> 或者 <c-[> 效果一样.

    多看 vim tips, 多学学各种 vim 插件.

    话说回来了, 人家只是个文字编辑器而已, 别本末倒置了.

    分割线

    顺便推荐一个 vim 的插件集合, 叫做 Janus, 它对自己的定义是 Janus: Vim Distribution. 它提供了一个完整的, 必需的 vim 基本设置和大多数人都需要的插件, 以及继续自定义 vim 的解决方案. 多说无益, RTFM.

    回复
    0
  • 習慣沉默

    習慣沉默2017-05-16 16:44:38

    用vim主要是自己定义各种功能,使用各种插件。 主要是配置vimrc, 你可以参考别人的vimrc,在github上搜索vimrc,比如https://github.com/search?q=vimrc&ref... ,看看别人是怎么配置的,改成自己的就ok了。

    esc可以用jj 或者 jk 代替。

    inoremap jk <ESC> 

    回复
    0
  • 为情所困

    为情所困2017-05-16 16:44:38

    看完自带的教程(有中文的,下载链接,下载需要翻墙),但是不用死记硬背,只要记住有哪些功能就可以了。

    遇到似乎可以用到这些功能的地方就开始查阅教程,然后慢慢的你查的会越来越少,越来越少,慢慢的你就会了。

    举个例子:

    Hello World foobar

    如果你想删除foobar ,那么你可以用ffdw这个组合命令(f是在一行内查询,后面那个f就是foober 的首字母,这是命令的第一部分,将光标移到foobar这个单词上面,d是删除,w是选中一个词,组合起来就是删除一个词),非常快捷,而且都是简单命令的组合。

    然后如果你想要处理比较复杂的场景,比如

    foobar
    foobar
    foobar
    foobar

    只把前面的foo 删掉,留下那个bar,这时候虽然vim提供了处理的功能,但是我们不用管,用宏录制的功能(能保存你的操作,你可以简单的重复)把简单的命令组合起来,就可以做很多很复杂的工作了

    比如上面这个例子(手头暂时没有Vim,凭记忆可能有错),

    qa (将命令录制到a这个剪贴板上{vim有好多个剪贴板,比如abcdefg……})
    3x (重复三遍删除操作,将foo删掉,其实也可以用f命令来搭配,对复杂的情况更适用)
    0 (移动到行首)
    j (移动到下一行)
    q (停止录制)
    3@a (重复三遍刚才录制的命令,3就是将命令重复3遍,@就是运行,a就是刚刚保存的那个剪贴板)

    这就解决了。

    Vim 根本不难,原因在于90%的状况都只要很简单的一些命令的灵活搭配。

    剩下10%的状况查教程也很容易知道。你让一个会用Vim的人默写命令,在对比所有的命令,会发现人家只知道很小一部分。

    回复
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 16:44:38

    上面的人说的都很详细了,不过对于esc键建议用改键之类的换成Caps Lock这样按起来要方便很多。

    据说RMS写Emacs的时候的键盘是这样的
    很明显Esc和Control的距离要很舒服的,如果有钱也入一块HHKB吧。

    回复
    0
  • 阿神

    阿神2017-05-16 16:44:38

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 16:44:38

    http://vim-adventures.com/
    根据vim操作写的小游戏,游戏同时练习vim操作。

    回复
    0
  • 取消回复