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

Vim 从小白到入门

  •  1
     
  •   wsgzao · 133 天前 · 3537 次点击
    这是一个创建于 133 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    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   133 天前
    markdown 表格显示不正常
    starsriver
        2
    starsriver   133 天前 via Android
    从小白到 idea
    zpvip
        3
    zpvip   133 天前
    从入门到放弃

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

    平时还是用 IDE 吧。
    DefoliationM
        4
    DefoliationM   133 天前
    一看到 `《 Linux 就该这么学》` 就知道您这是广告了,之前在 linux 吧没被锤够,跑 V2EX 了?
    weixiangzhe
        5
    weixiangzhe   133 天前
    从入门到放弃,没见过别人操作过,不会了解到 vim 的高效的
    blueberryman
        6
    blueberryman   133 天前 via Android
    多谢楼主,正好需要这个
    bugDev
        7
    bugDev   133 天前 via iPhone
    说 vim 有四种模式是直接劝退的节奏,就说有两种模式多好记
    wellsc
        8
    wellsc   133 天前
    命令行输入 `vimtutor` 过一遍,然后直接开始上手写代码
    leafleave
        9
    leafleave   133 天前 via iPhone
    vim 从入门到 nano
    zhouzm
        10
    zhouzm   133 天前
    别说小白了,我用了这么多年 vim 的,也不愿意看这么一大堆的指南。
    其实只要中间那段 5 步骤就行了,在线练练就入门了
    wsgzao
        11
    wsgzao   133 天前
    @Steiner #1 V2EX 无法正常显示表格,你可以阅读原文
    @DefoliationM 我自己也考过 RHCE,凭良心说这本教材本身质量很高,我推荐给周围的同事也都是正面评价,你忽略官网和培训广告就好了
    @weixiangzhe 每个人习惯不一样,会基本的其实手速慢点而已,平时没有高频需求其实无所谓
    @bugDev 我一开始也仅仅用 2 个模式,但看高手怎么在玩 Vim 通杀 Windows/Linux/macOS 后发现自己还是应该改变下习惯提升下效率,不然也仅仅停留在 IDE 阶段
    @zhouzm 工作使用频率高可以改变下习惯,不过有 Sublime 或者 VS Code 等 IDE 确实也已经很方便了
    hellodudu86
        12
    hellodudu86   133 天前
    兄弟 这样只会劝退新人,不如贴一些 vim 的酷炫效果或者奥僧功能容易拉新人入坑
    DefoliationM
        13
    DefoliationM   133 天前 via Android
    @wsgzao 哪高了 高啥。你自己凭良心说。
    wsgzao
        14
    wsgzao   133 天前
    @DefoliationM #13 我在 3 年前偶然间看到他在推广自己的开源图书和培训课程,但是这本书我完整读完了,早期我也是看鸟哥的私房菜学习,然后 RHCE 给了全英文原版教材,我凭良心说是因为这本书可以让初学者少走弯路,至少我是受益者。作者给我的感觉很像李笑来写书的态度,2019 年因为李笑来 GitHub 重新上传了写的书其中有一个我从没见过的 repo 叫 xiaolai/ji: 挤挤都会有的,而之前的书开源之后再重新读一遍又会有新的理解。每个人对刘遄的做法都有自己的见解,他做了我认为有意义的事情,当然也可能做了令你十分反感的行为,大家各抒己见交流看法也挺好。
    cnzzz
        15
    cnzzz   132 天前
    建议发到推广专区
    Chobits
        16
    Chobits   132 天前
    咋不写个《 Vim 就该这么学》?从兴趣到被坑到放弃
    zeroDev
        17
    zeroDev   132 天前 via Android
    我怎么感觉,尽管我专门学了一个月 vim,看你这文章还是有点心态崩(又长又密)
    justou
        18
    justou   132 天前   ♥ 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   132 天前
    上来就是几张大图真的太劝退了,既然引用了陈皓翻译的《简明 VIM 练级攻略》,为什么不吸取它循序渐进的核心思想呢?
    Meltdown
        20
    Meltdown   132 天前 via Android
    有条件的可以玩玩 vim adventures
    wsgzao
        21
    wsgzao   132 天前
    @justou #18 感谢长文回复,工作几年后其实这些都不重要,抓住核心吃透以后学其他的都很快,本质上还是锻炼自己思考问题和解决问题的能力,熟练掌握多加练习就够了
    @ClaudeRay 我贴了 3 张图本意想告诉大家原始出处,其中第三张图才是入门的核心,而文章开头也强调了一个字"用",Vim 本身历史已经很久远,网上写得详细的很多比如陈皓哥 2011 年就写的《简明 VIM 练级攻略》,但我自己也很少做到深度使用习惯,我只是想做下记录希望可以帮助之后的人
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1338 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 33ms · UTC 18:12 · PVG 02:12 · LAX 10:12 · JFK 13:12
    ♥ Do have faith in what you're doing.