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

Vim 从小白到入门

  •  1
     
  •   wsgzao ·
    wsgzao · 2019-09-06 19:32:01 +08:00 · 6252 次点击
    这是一个创建于 1687 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器。而 Windows ❤️ Linux 的态度转变相信大家会经常使用到 Vim 文本编辑器,关于 Vim 的文章网上已经很多了本文只记录自己常用的作为备忘录,然而熟练掌握的方法始终只有一个字

    Vim 从小白到入门

    更新历史

    2019 年 09 月 06 日 - 初稿

    阅读原文 - https://wsgzao.github.io/post/vim/

    扩展阅读

    Vim 英文文档 - http://vimdoc.sourceforge.net/htmldoc/

    Vim 中文文档 - http://vimcdoc.sourceforge.net/doc/


    Vim 键盘图

    Vim 入门 5 步骤

    完成以下练习恭喜你打开 Vim 的大门

    1. vim HelloWorld.txt
    2. 键入 i
    3. 编辑 输入任意信息,如 Hello World
    4. 键入 [ESC]
    5. 键入:wq 保存退出

    你可以访问Vim 在线练习模拟器,通过引导熟悉 Vim

    Vim 基础概念

    Vim 常用模式

    • 正常模式 (Normal Mode)
    • 插入模式 (Insert Mode)
    • 可视模式 (Visual Mode)
    • 命令模式 (Command Mode)

    ①. 正常模式 (Normal Mode) 正常模式主要用来浏览和修改文本内容的

    一般的,打开 Vim 都是正常模式。在任何模式下,只要按下 Esc 键就可以返回正常模式。

    ②. 插入模式 (Insert Mode) 插入模式则用来向文本中添加内容的,我自己常用的是 i 和 o

    i 在光标所在字符前开始输入文字并进入插入模式

    o (字母 o) 在光标所在行的下面单独开一新行来输入文字并进入插入模式

    ③. 可视模式 (Visual Mode) 可视模式相当于高亮选取文本后的普通模式。

    可视模式具有子模式,以行为单位进行选取的可视行模式,使用 “V” 键进入(也就是 Shift+v );和以块为单位进行选取的可视块模式,使用 “Ctrl+v” 键进入。

    ④. 命令模式 (Command Mode) 命令模式则多用于操作文本文件(而不是操作文本文件的内容),例如保存文件;或者用来改变编辑器本身的状态,例如设定多栏窗口、标签或者退出编辑器

    配置文件

    通过运行vim -V可查看整个初始化过程

    Vim 的全局配置一般在/etc/vimrc,对所有用户生效

    用户个人的配置在~/.vimrc,你可以把自己喜欢的配置比如:set number显示行号添加进去

    vim ~/.vimrc
    
    " Configuration file for vim
    set modelines=0         " CVE-2007-2438
    
    " Normally we use vim-extensions. If you want true vi-compatibility
    " remove change the following statements
    set nocompatible        " Use Vim defaults instead of 100% vi compatibility
    set backspace=2         " more powerful backspacing
    
    " Don't write backup file if vim is being called by "crontab -e"
    au BufWrite /private/tmp/crontab.* set nowritebackup nobackup
    " Don't write backup file if vim is being called by "chpass"
    au BufWrite /private/etc/pw.* set nowritebackup nobackup
    
    let skip_defaults_vim=1
    
    set ai                  " auto indenting
    set ruler               " show the cursor position
    set hlsearch            " highlight the last searched term
    set history=1000        " keep 1000 lines of history
    syntax on               " syntax highlighting
    filetype plugin on      " use the file type plugins
    

    Vim 常用命令

    以下为 Vim 相对高频的命令,在日常使用中善用组合方法,记住核心的几种命令即可

    正常模式 (Normal Mode)

    | 命令 | 作用(解释) | | --- | --- | | h,j,k,l | h 表示往左,j 表示往下,k 表示往右,l 表示往上 | | Ctrl+ f | 上一页 | | Ctrl+ b | 下一页 | | weWE | 跳到单词的后面,小写包括标点 | | bB | 以单词为单位往前跳动光标,小写包含标点 | | o | 开启新的一行 | | ^ | 一行的开始 | | $ | 一行的结尾 | | gg | 文档的第一行 | | [N]G | 文档的第 N 行或者最后一行 | | dd | 删除一行 | | dw | 删除一个单词 | | x | 删除后一个字符 | | X | 删除前一个字符 | | D | 删除一行最后一个字符 | | [N]yy | 复制一行或者 N 行 | | yw | 复制一个单词 | | p | 粘贴 | | u | 撤销上一步操作 | | ctrl+ r | 恢复上一步操作 | | . | 重复最后一个命令 | | /pattern | 向光标下搜索字符串,可以是正则表达式| | ?pattern | 向光标上搜索字符串 | | n | 向下搜索前一个搜素动作 | | N | 向上搜索前一个搜索动作 |

    插入模式 (Insert Mode)

    | 命令 | 作用(解释) | | --- | --- | | i | 插入到光标前面 | | I | 插入到行的开始位置 | | a | 插入到光标的后面 | | A | 插入到行的最后位置 | | oO | 新开一行 | | Esc | 关闭插入模式 |

    视觉模式 (Visual Mode)

    | 命令 | 作用(解释) | | --- | --- | | v | 选中一个或多个字符 | | V | 选中行 | | ctrl+ v | 选中列 |

    命令模式 (Command Mode)

    | 命令 | 作用(解释) | | --- | --- | | :set nu | 显示行号 | | :set nonu | 取消显示行号 | | :set paste | 设置粘贴模式 | | :%s/old/new/g | 全文替换 | | :w | 保存 | | :wq, :x | 保存并关闭 | | :q | 关闭(已保存) | | :q! | 强制关闭 | | :split | 水平方向分割出一个窗口 | | :vsplit | 垂直方向分割出一个窗口 | | :close | 关闭窗口 | | Ctrl+ W | 切换窗口, h 到左边窗口,j 到下方窗口,k 到上方窗口,l 到右边窗口 |

    参考文章

    Vim 中文文档

    简明 VIM 练级攻略

    第 4 章 Vim 编辑器与 Shell 命令脚本

    《 Linux 就该这么学》最新版下载地址: Word 版本PDF 版本

    21 条回复    2019-09-07 22:41:17 +08:00
    Steiner
        1
    Steiner  
       2019-09-06 20:57:30 +08:00
    markdown 表格显示不正常
    starsriver
        2
    starsriver  
       2019-09-06 21:02:57 +08:00 via Android
    从小白到 idea
    zpvip
        3
    zpvip  
       2019-09-06 21:12:36 +08:00
    从入门到放弃

    记住几个简单的功能就可以了,方便有时候在服务器上改个配置文件。

    平时还是用 IDE 吧。
    DefoliationM
        4
    DefoliationM  
       2019-09-06 21:43:40 +08:00
    一看到 `《 Linux 就该这么学》` 就知道您这是广告了,之前在 linux 吧没被锤够,跑 V2EX 了?
    weixiangzhe
        5
    weixiangzhe  
       2019-09-06 22:06:22 +08:00
    从入门到放弃,没见过别人操作过,不会了解到 vim 的高效的
    blueberryman
        6
    blueberryman  
       2019-09-06 22:20:18 +08:00 via Android
    多谢楼主,正好需要这个
    bugDev
        7
    bugDev  
       2019-09-06 22:29:46 +08:00 via iPhone
    说 vim 有四种模式是直接劝退的节奏,就说有两种模式多好记
    wellsc
        8
    wellsc  
       2019-09-06 22:48:19 +08:00
    命令行输入 `vimtutor` 过一遍,然后直接开始上手写代码
    leafleave
        9
    leafleave  
       2019-09-06 22:50:29 +08:00 via iPhone
    vim 从入门到 nano
    zhouzm
        10
    zhouzm  
       2019-09-06 22:52:54 +08:00
    别说小白了,我用了这么多年 vim 的,也不愿意看这么一大堆的指南。
    其实只要中间那段 5 步骤就行了,在线练练就入门了
    wsgzao
        11
    wsgzao  
    OP
       2019-09-06 23:09:43 +08:00
    @Steiner #1 V2EX 无法正常显示表格,你可以阅读原文
    @DefoliationM 我自己也考过 RHCE,凭良心说这本教材本身质量很高,我推荐给周围的同事也都是正面评价,你忽略官网和培训广告就好了
    @weixiangzhe 每个人习惯不一样,会基本的其实手速慢点而已,平时没有高频需求其实无所谓
    @bugDev 我一开始也仅仅用 2 个模式,但看高手怎么在玩 Vim 通杀 Windows/Linux/macOS 后发现自己还是应该改变下习惯提升下效率,不然也仅仅停留在 IDE 阶段
    @zhouzm 工作使用频率高可以改变下习惯,不过有 Sublime 或者 VS Code 等 IDE 确实也已经很方便了
    hellodudu86
        12
    hellodudu86  
       2019-09-06 23:54:05 +08:00
    兄弟 这样只会劝退新人,不如贴一些 vim 的酷炫效果或者奥僧功能容易拉新人入坑
    DefoliationM
        13
    DefoliationM  
       2019-09-06 23:57:16 +08:00 via Android
    @wsgzao 哪高了 高啥。你自己凭良心说。
    wsgzao
        14
    wsgzao  
    OP
       2019-09-07 01:58:27 +08:00
    @DefoliationM #13 我在 3 年前偶然间看到他在推广自己的开源图书和培训课程,但是这本书我完整读完了,早期我也是看鸟哥的私房菜学习,然后 RHCE 给了全英文原版教材,我凭良心说是因为这本书可以让初学者少走弯路,至少我是受益者。作者给我的感觉很像李笑来写书的态度,2019 年因为李笑来 GitHub 重新上传了写的书其中有一个我从没见过的 repo 叫 xiaolai/ji: 挤挤都会有的,而之前的书开源之后再重新读一遍又会有新的理解。每个人对刘遄的做法都有自己的见解,他做了我认为有意义的事情,当然也可能做了令你十分反感的行为,大家各抒己见交流看法也挺好。
    cnzzz
        15
    cnzzz  
       2019-09-07 09:07:08 +08:00
    建议发到推广专区
    Chobits
        16
    Chobits  
       2019-09-07 09:16:52 +08:00
    咋不写个《 Vim 就该这么学》?从兴趣到被坑到放弃
    zeroDev
        17
    zeroDev  
       2019-09-07 09:17:57 +08:00 via Android
    我怎么感觉,尽管我专门学了一个月 vim,看你这文章还是有点心态崩(又长又密)
    justou
        18
    justou  
       2019-09-07 10:28:59 +08:00   ❤️ 3
    Vim 虽然有些快捷键含义很明显,比如 wq = write quit, 但是还有很多其它不那么明显的,比如 gg GG 如何理解?为什么要设置为这个,虽然有些可能很难考究,如果能把背后的 idea 写出来(也可以是自己的理解。我把 GG 理解“GO!GO!”, 冲到末尾了),我觉得就是一个很好的教程了。

    Linux 里的每个概念都可以讲出一堆东西,一些可以操纵这些概念的命令,各种缩写(包括各种 optional,都缩写成一个字母了)如果都能列出其全称,就能和对应的概念很好地联系起来,提高学习效率。首先搞清概念背后的原理跟思想,然后再用命令去操纵,我觉得 Linux 应该这么学。

    都是记流水账形式的资料比如:“Linux 里有个啥东西,我们过一遍命令 a,贴张图,这样了,再过一遍命令 b,啊,这样了,有趣吧?” 看这样的是学不到东西的,原理呢思想呢?这种流水账适合自己藏起来当参考和备忘录,拿出来很大程度上只是劝退小白跟新人。不知道有没有人有过这种感觉:想学一个东西,找了本书,哎呀,看不懂,各种怪东西毫无理由地从天而降,看得心里堵得慌,扔一边了;时隔多日,已经对这个东西比较熟了,再次拿起那本书,发现这本书只是那些你已熟知的知识的罗列,根本没有讲思想,于是又扔一边了:真是新手看不懂,老手不屑看啊。

    搜各种缩写时找到的一些资料:
    https://i.linuxtoy.org/docs/guide/ch02s02.html
    https://www.zhihu.com/question/49073893
    https://en.wikipedia.org/wiki/List_of_computing_and_IT_abbreviations#I

    目前正在看的一本书:
    Beginning the Linux Command Line, 2nd edition

    我真正开始学 Linux 也才一个多月
    ClaudeRay
        19
    ClaudeRay  
       2019-09-07 11:53:32 +08:00
    上来就是几张大图真的太劝退了,既然引用了陈皓翻译的《简明 VIM 练级攻略》,为什么不吸取它循序渐进的核心思想呢?
    Meltdown
        20
    Meltdown  
       2019-09-07 13:35:20 +08:00 via Android
    有条件的可以玩玩 vim adventures
    wsgzao
        21
    wsgzao  
    OP
       2019-09-07 22:41:17 +08:00
    @justou #18 感谢长文回复,工作几年后其实这些都不重要,抓住核心吃透以后学其他的都很快,本质上还是锻炼自己思考问题和解决问题的能力,熟练掌握多加练习就够了
    @ClaudeRay 我贴了 3 张图本意想告诉大家原始出处,其中第三张图才是入门的核心,而文章开头也强调了一个字"用",Vim 本身历史已经很久远,网上写得详细的很多比如陈皓哥 2011 年就写的《简明 VIM 练级攻略》,但我自己也很少做到深度使用习惯,我只是想做下记录希望可以帮助之后的人
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   909 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:02 · PVG 05:02 · LAX 14:02 · JFK 17:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.