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

30 分钟入门 Vim

  •  
  •   codeboy18 · 2021-02-25 19:57:39 +08:00 · 3107 次点击
    这是一个创建于 1365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    更多精彩内容,请关注微信公众号:后端技术小屋

    30 分钟入门 Vim

    Vim 是从 vi 发展出来的一个文本编辑器,是 Linux 后端开发人员必会工具之一,被广大码农戏称为编辑器之神(神之编辑器是 Emacs,笔者没用过,看起来段位比 Vim 更高)。本文简单介绍 Vim 中不同的模式以及每个模式下的高频命令,希望能够引领初学者快速入门。

    Vim 的模式

    Vim 中有多种模式,这种独特的设计容易让很多初学者产生混淆。仅通过键盘,便可在 Vim 的多种模式之间自由切换。

    普通模式

    Vim 启动之后的默认模式是普通模式,这一点与大多数编辑器正好相反(默认是插入模式)。在这种模式下,用户可执行移动光标、删除文本等操作。例如跳转到第 n 行,删除第 n 行数据。

    插入模式

    在这个模式中,大多数按键都会向当前光标处插入文本。

    选择模式

    选择模式与 Windows 下用鼠标选中某一段文本相似。Vim 的独特之处在于,只需要通过按键即可选中某一段文本。

    命令模式

    在命令模式下,可以输入 Vim 命令并由 Vim 执行。通常在这种模式下执行搜索、替换、保存文件、退出文件等命令

    模式之间的切换

    • 插入模式下,输入"Esc",进入普通模式
    • 普通模式下,输入"i"(或"a", "o" 大小写皆可,但是有不同的含义), 进入插入模式
    • 普通模式下,输入":"(或"/", "?", "!"),进入命令模式
    • 普通模式下,输入"v"(或"V"),进入选择模式

    Vim 常用命令

    文件导航

    在普通模式下,可执行以下命令可使光标快速到达目标处:

    gg        跳转到当前文件第一行
    G         跳转到当前文件最后一行
    <n>%      跳转到当前文件的 n%处
    
    ^         跳到光标当前行的开始
    $         跳到光标当前行的结尾
    f <char>  跳转到当前行光标后第一个<char>的前一个位置
    
    *         光标所在处单词高亮,并跳转到下一个相同单词处
    #         光标所在处单词高亮,并跳转到上一个相同单词处
    
    %         跳转当前光标处括号("[", "{", "(")相配对的括号
    {         跳转到当前段落的开头
    }         跳转到当前段落的结尾
    (         跳转到当前句子的开头
    )         跳转到当前句子的结尾
    [[        跳转至上一个函数 /类(要求 C++代码中'{'必须单独占一行)
    ]]        跳转至下一个函数(要求同上)
    
    CTRL + O  跳转到历史光标位置列表的前一个位置处
    CTRL + I  跳转到历史光标位置列表的后一个位置处
    
    mx        设置书签,x 只能是 a-z 的 26 个字母
    `x        跳转到书签处
    
    zR        展开代码折叠
    

    文件编辑

    在普通模式下,可执行以下命令对文件进行编辑

    x         删除光标位置的字符
    dw        删除光标位置的单词
    dt<char>  删除光标之后到第一个字符<char>中间的所有文本(不包括<char>)
    dd        删除当前行
    <n>dd     删除 n 行
    dgg       删除文件第一行到当前行的所有文本
    dG        删除当前行到文件最后一行的所有文本
    
    >>        当前代码行增加缩进
    <<        当前代码行减小缩进
    n>>       对 n 行增加缩进
    n<<       对 n 行减小缩进
    =         格式化当前行代码
    
    r<char>   对光标位置的字符进行替换,新字符为<char>
    
    yy        将当前行复制到缓冲区
    <n>yy     复制 n 行到缓冲区
    p         将缓冲区复制到下一行
    P         将缓冲区复制到上一行
    J         将下一行文本合并到当前行
    
    o         在光标下一行增加一空行, 光标跳转至空行开头,并进入插入模式
    O         在光标上一行增加一空行, 光标跳转至空行开头,并进入插入模式
    

    文本选择

    在选择模式下,可执行以下命令进行文本选择

    v         按 v 进入行选择模式,接着按 Up 或者 Down 键选择多行
    V         按 V 进入列选择模式,接着按 UP 或者 Down 键选择行范围,按 Left 或 Right 键选择列范围。
    

    当选中了目标文本之后,我们便可对选中文本进行复制(y 与 p 组合)、删除(d)、改写。

    文本搜索与替换

    在命令模式下,可执行以下命令对文本进行搜索和替换

    /<keyword>                              文件中向下搜索<keyword>
    ?<keyword>                              文件中向上搜索<keyword>
    n                                       如果使用`/<keyword>`搜索,跳转到匹配列表的下一个位置;否则跳转到匹配列表的上一个位置
    N                                       如果使用`/<keyword>`搜索,跳转到匹配列表的上一个位置;否则跳转到匹配列表的下一个位置
    
    /c<keyword>                             文件中搜索<keyword>,忽略大小写
    
    :s/keyword1/keyword2/g                  将文件中的 keyword1 全部替换成 keyword2
    :1,100s/keyword1/keyword2/g             将文件中 1 到 100 行的 keyword1 全部替换成 keyword2
    :1,100s/keyword1/keyword2/gc            将文件中 1 到 100 行的 keyword1 替换成 keyword2,针对每次替换显示确认对话框
    
    :!<bash command>                        退出 vim 窗口后执行 bash 命令,再返回 vim 窗口
    
    :%!xxd                                  以十六进制查看文件内容 
    :%!xxd -r                               恢复原状
    
    :set fileencoding                       查看当前文件编码
    
    :goto <offset>                          跳转到文件中偏移量为<offset>的位置
    

    一些常用的组合操作

    格式化代码

    ggvG=   格式化文件中所有代码
    

    在文本中插入一列

    V       首先按 V 进入列选择模式,然后通过 Left/Right, Up/Down 选择插入列的位置
    I       按 I 进行插入模式,然后输入文本 abc,可看到所有行都插入了一列 abc
    

    多行复制

    v       首先按 v 进入行选择模式,然后通过 Up/Down 键选择多行
    y       将选中的多行复制到缓冲区中
            光标跳转到要粘贴的位置
    p       将缓冲区中的多行复制到光标位置
    

    将某列文本转化成大写 /小写

    V       按 V 进入列选择模式,然后通过 Left/Right, Up/Down 选择插入列的位置
    U       按 U 将选中的一列文本转化为大写;按 u 则将其转化为小写
    

    推荐阅读

    更多精彩内容,请扫码关注微信公众号:后端技术小屋。如果觉得文章对你有帮助的话,请多多分享、转发、在看。

    二维码

    15 条回复    2021-09-08 18:44:14 +08:00
    Team
        1
    Team  
       2021-02-25 19:59:07 +08:00   ❤️ 2
    说句实话,看这个东西根本就入门不了 Vim 。

    Vim 有自带的教程,可以实操进行练习。

    这种东西网上一抓一大把,写出来也没人看。
    wzb0909
        2
    wzb0909  
       2021-02-25 20:27:26 +08:00 via iPhone   ❤️ 7
    写的什么破烂,有这功夫不能做点对社会有用的事情吗,割韭菜姿态太丑。
    bingowrt
        3
    bingowrt  
       2021-02-25 20:36:44 +08:00
    我觉得自带教程还真能 30 分钟入门,而且还有操作,纯看不试,靠记忆恐怕不太行啊。
    exiahan
        4
    exiahan  
       2021-02-25 20:38:35 +08:00 via Android
    已经习惯了 Emacs 的 Meta+X🐶
    AllenHua
        5
    AllenHua  
       2021-02-25 20:40:09 +08:00   ❤️ 1
    熟能生巧 靠记忆不行

    过几天就忘了

    需要实操 不知道再百度 等了解了不少的时候 可以系统学习 加深印象

    我甚至觉得 一开始的“通读一遍” 都没什么大用 边练习边看应该会有效果
    focux
        6
    focux  
       2021-02-25 21:48:17 +08:00
    形成肌肉记忆才是王道
    proxychains
        7
    proxychains  
       2021-02-26 08:57:51 +08:00
    留二维码先死🐎
    twor2
        8
    twor2  
       2021-02-26 09:16:03 +08:00
    风向有点带偏了
    不过话糙理不糙,可以考虑真正的如何帮助入门 VIM,哪怕一个很小的点,做细,这是我想到的
    yuhangch
        9
    yuhangch  
       2021-02-26 09:41:07 +08:00
    jjjjjkkkkkkwwwwwi
    IgniteWhite
        10
    IgniteWhite  
       2021-02-26 10:15:02 +08:00 via iPhone
    @twor2 考虑这个问题:ssh 访问 tmux 里的 vim 实例,如何和本地的剪贴板交互?这可能是个很小的点,但是对于天天用 vim 的人来说蛮重要。诸如此类的点多的去了,所谓 vim 用的熟练,是在日积月累中和 vim 社群的人提问交流,把这些小的点学会了。一本万金油的很薄的入本书籍不存在的
    DonkeyBenjamin
        11
    DonkeyBenjamin  
       2021-02-26 10:46:13 +08:00   ❤️ 2
    随手 google 两个在线的 interactive tutorial 都比这个好,比如
    https://openvim.com

    游戏版本,绝对学会 vim 的基本操作
    https://vim-adventures.com
    ixx
        12
    ixx  
       2021-02-26 10:59:10 +08:00
    标题改成《 5 分钟放弃 VIM 》比较好,看完 4 个模式就觉得要完 再看到下边一堆快捷键,我估计用不了 5 分钟大家就放弃了
    sadfQED2
        13
    sadfQED2  
       2021-02-26 11:49:23 +08:00 via Android
    此时以为只会 iwq 的程序猿低调路过
    codeboy18
        14
    codeboy18  
    OP
       2021-09-07 15:58:10 +08:00
    @proxychains 你傻逼吧。留个二维码至于骂街吗
    proxychains
        15
    proxychains  
       2021-09-08 18:44:14 +08:00
    @codeboy18 引流不发到推广节点?
    你写的这玩意网上不是一堆?引流割韭菜 4000+
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   954 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:49 · PVG 05:49 · LAX 13:49 · JFK 16:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.