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

30 分钟入门 Vim

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

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

    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
    FurN1
        10
    FurN1  
       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     Solana     1001 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:37 PVG 02:37 LAX 10:37 JFK 13:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86