阅读 1052

程序员必备vim编辑器命令,你想要的我都整理好了(建议收藏)

前言

上个月组内来了一个新的小伙伴,赶巧那个时候我休假了!当我休完假来的时候,这个新小伙伴成了我同桌,然后就是一起做项目咯。就在昨天我们在配置环境,修改各种配置文件的时候;小伙伴看到我各种vim的快捷指令使用,有点惊讶了:“卧槽,你怎么做到记得这么清楚的?这谁能记得住?教教我呗?”。

其实很简单:多写多用多练,例如:之前的一个同事,写代码只用vim编辑模式,我就是从这来学来的。

关于liunx下vim指令,我刚毕业的时候画过一张思维导图(这么久了我以为没有删除,云盘竟然被清理了),不过可以按照下面的知识点,一个个看一遍且本地操作一遍。🤣 😏 😜

01 vim配置文件

我们先来看看我们本机vim的配置文件信息,我这里是mac端:

① liunix端 vim ~/.vimrc| mac端 vim /usr/share/vim/vimrc 进入配置文件

如果不知道vimrc文件在哪,可使用 :scriptnames 来查看,例如:

vim hello.lua
 
 ② :scriptnames 会出现如下列表:
 
 1: /usr/share/vim/vimrc -- 这个就是本机的一个配置文件
 2: /usr/share/vim/vim80/defaults.vim
 3: /usr/share/vim/vim80/plugin/getscriptPlugin.vim
 ..................................................
 13: /usr/share/vim/vim80/plugin/vimballPlugin.vim
 14: /usr/share/vim/vim80/plugin/zipPlugin.vim
复制代码

我们来看看默认的配置项:

" 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 nu     " 行号

set tabstop=4 " 一个tab为4个空格长度

set ai        " 设置自动缩进

syntax on     " 高亮


" Source a global configuration file if available
if filereadable("/etc/tmp/vim/config/vimrc.local") -- 我本地最常使用的配置,默认不修改配置,将需要的配置,以另外文件的形式加载进来
  source /etc/tmp/vim/config/vimrc.local
endif

" 当新建 .h .c .hpp .cpp .mk .sh等文件时自动调用SetTitle函数
autocmd BufNewFile *.[ch],*.hpp,*.cpp,Makefile,*.mk,*.sh exec ":call SetTitle()"
" 加入注释
""定义函数SetTitle,自动插入文件头 
func SetTitle()
    if &filetype == 'sh'
        call setline(1, "#================================================================") -- 分隔符
        call setline(2, "#   ")
        call setline(3, "#   file Name:".expand("%:t"))     -- 文件名称
        call setline(4, "#   copyright@ Author:我是阿沐")     -- 创建文件人名称
        call setline(5, "#   created Time:".strftime("%c")) -- 创建日期
        call setline(6, "#   mail: "2511221051@qq.com)       -- 创建人邮箱
        call setline(7, "#   desc:")                        -- 文件功能描述
        call setline(8, "#")
        call setline(9, "#================================================================")
        call setline(10,"#!/bin/sh")  -- 文件类型
        call setline(11, "")
        call setline(12, "")
    endif
endfunc

### 还有很多的命令
复制代码

02 vim的基本概念概述

我们都知道vim是有三种状态,分别是命令行模式(command mode)、输入模式(Insert mode)和底线命令模式(last line mode),这 3 种工作模式可随意切换,如下图所示:

vim工作模式

02.1 vim命令行模式

我们使用vim编辑文件的时候,默认进入文件是命令行模式;在此模式下,可以使用键盘上的方向键:键 或者 kjhl移动光标的位置;当然我们也可以使用快捷键对文件内容进行复制、粘贴、删除、替换等等一系列操作。 常用的几个命令:

### 命令行模式下,比较常用的几个命令:

i 切换到输入模式,以输入字符  -- 最最常用

x 删除当前光标所在处的字符

X 删除当前光标前一个字符

: 切换到底线命令模式,以在最底一行输入命令

dd 移动光标到某一个位置,删除一整行数据命令

o 在当前行的下面另起一行,并变为输入模式

shift+g 跳转到文件末尾

gg 跳转到文件首行g
复制代码

下图所示是vim处于命令行模式的状态示意图。

vim命令行模式

02.2 vim输入模式

在vim 输入模式下,可以对有写入权限的文件进行写操作;跟我们平常在编辑器中开发基本一样了。那么我们通常在命令模式下直接通过命令进入输入模式:iIaAoO等插入命令就可以进入;当我们编辑完文件之后按esc键就可以退出出入模式返回命令模式:

快捷键功能描述
i在光标的左侧输入文本,光标右侧文本向右移动
I在光标所在行的行首输入文本,相当于在行首执行了i命令
a在光标的右侧输入文本
A在光标所在行的尾部进行输入文本,相当于在光标行尾执行a命令
o在光标所在行的下一行增添新的一行,光标停留在新行的行首
O在光标所在行的上一行增添新的一行,光标停留在新行的行首

下图所示为vim处于输入模式模式下的示意图:

vim输入模式

02.3 vim底线命令模式

vim的底线命令模式:在命令模式下按:(注意是英文冒号),此时vim的窗口左下方会出现一个:符号,这时就已经进入了底线命令模式了。

注意:指令执行之后会把自动返回到命令行模式的。

作用:底线命令模式可以对文件中指定的内容进行保存、替换、查询、删除等等操作。

最最最常用指令快捷键如下图:

快捷键功能描述
:q退出vi编辑器
:q!不保存文件,直接退出vi编辑器
:w只保存文件,但不退出vi编辑器
:wq保存文件且退出vim编辑器
:start,endd从第start行开始到end行进行删除操作 最后一个d标识删除
:%d清空文件内容(跳到行首dG执行也可删除)
:! command暂时离开vim编辑器去到指令模式下执行 command 命令显示结果
:%d清空文件内容(跳到行首dG执行也可删除)

下图所示为vim进入底线命令模式后的操作状态图:

vim底线命令模式

vim的常用命令+快捷键

PS:大家可以关注一下gif图形,每一个操作动画都会带有命令;注意观看
复制代码

03.1 vim打开文件命令

① 正常打开一个文件默认光标在第一行

➜  ~ vim filename  -- filename指文件名
复制代码

② 正常打开一个文件默认光标在文件尾部

➜  ~ vim + package.json  -- package.json打开的文件名或者文件路径
复制代码

③ 正常打开一个文件默认让光标定位在第几行

➜  ~ vim +num package.json -- num 标识光标定位到第几行
复制代码

03.2 vim命令模式下,光标移动

① 字符移动命令

① h 将光标向左移动一格

② j 将光标向下移动一格

③ k 将光标向上移动一格

④ l 将光标向右移动一格

### 注意注意

这些移动的指令我们也可以带上一次移动多少,例如:2j -- 表示向下移动2复制代码

2021-05-29 13.03.14.gif

② 单词移动命令

w 将光标向右移动到下一个单词的词首

② b 将光标向前移动到前一个单词的词首

③ e 将光标跳转到当前或下一个单词的词尾

复制代码

单词移动命令

③ 首尾行移动命令

① $ 将光标移动到当前行的尾部

② 0 将光标移动到当前行的行首 -- 0 表示数字零 不是字母O 

③ gg 将光标跳转到文件第一位置

④ G 将光标跳转到文件的末尾

⑤ num+G 将光标跳转到文件的第几行 -- num表示文件的第几行

⑥ :num 底线命令模式下,直接给出行号,同样可以实现跳转  -- num 跳转行数

复制代码

首尾行移动命令

④ 退出命令

① :wq 保存文件且退出vi编辑器

② :w  保存文件,但是不退出vi编辑器

③ :q  退出vi编辑器

④ :q! 不保存文件,直接退出vi编辑器               

⑤ ZZ  保存文件且退出vi编辑器
复制代码

⑤ 翻页键命令

① ctrl+d 将光标向下翻半屏,通常每次翻屏12行

② ctrl+u 将光标向上翻半屏,通常每次翻屏12行

③ ctrl+f 将光标向下翻满屏,通常每次翻屏24行

④ ctrl+b 将光标向上翻满屏,通常每次翻屏24复制代码

翻页键命令

⑥ 剪切和粘贴键命令

① d  删除指定位置的文本且临时存储到缓存区;可使用p访问缓存区;常常这样使用:d、:num,numd、dd(删除整行)、.. 

② y  将指定文本复制到临时缓存区;可使用put操作符访问;常常这样使用:y、yy(复制整行)

③ p  将指定缓存区内容放在光标位置之下;整行文本放在行下面,若是非整行文本则放在光标后面

④ P  将指定缓冲区的内容放到当前光标的位置之上;整行文本放在行下面,若是非整行文本则放在光标后面

复制代码

剪切和粘贴键命令

⑦ 文本修改键命令

x  删除光标位置指定的字符

② dd 删除光标所在的行

③ u 撤销最近的修改,针对所有修改

④ U 撤销对当前行上做的所有修改

⑤ r 替换光标位置上的一个字符,但不会进入insert模式;例如2r:把后面2个字符替换掉

⑥ R 替换从光标位置开始的字符,同时改变vi到文本输入模式

⑦ . 重复上一次的修改  -- 注意该命令是:英文符号点

复制代码

文本修改键命令

⑧ 搜索替换命令(需在底线命令模式)

① :/string   从文件首部开始查找到尾部;按n键可以跳到下一个,N上一个,另外按/键后,按上下键可以找到以前查找的记录,同样的也有记录

② :?string  同上,从当前光标向文件首部查找

③ :%s/word1/word2/g   从文件首到尾替换每一行的 word1为 word2

④ :num,num1s/word1/word2/g   从第num行到num1行替换word1为word2

⑤ :num,$s/word1/word2/g   从第num行查询word1字符串,并替换为word2

⑥ :s/str1/str2/g   从光标当前行搜索word1字符串并替换为word2

### 下面简单的操作下

复制代码

搜索替换命令

⑨ 将当前文件中的部分内容另存为另外一个文件

 ### 注意是在底线命令模式下
 
:num,$ w test.lua  -- 将当前文件从第 num 行到最后一行内容,保存到test.lua复制代码

⑩ 将别的文件内容填充在当前文件中

 ### 注意是在底线命令模式下
 
:r /usr/local/var/weixin/test.log  读取指定文件中的内容,插入到当前行的最后面
复制代码

⑩ 删除文本单词命令

① dw  删除当前光标后面的一个单词

② dnw 删除光标后面指定的n个单词 -- n表示要删除的单词数

③ d$  删除当前光标到行尾的全部单词

④ d^  删除当前光标到行首全部单词

⑤ dnj 从当前光标处向下删除n行  -- n表示删除的行数

⑥ dnk 从当前光标处向上删除n行  -- n表示删除的行数

⑦ :g/string/d   删除当前文件中string字符串的行

⑧ :%s/^\n$//g   删除空行
 
### 注意注意:

d指令换成c指令效果是一样的,只是操作完会变成insert模式

复制代码

删除文本单词命令

⑩ 文本内容移动命令

① >>    向右移动本行一段距离 

② <<    向左移动本行一段距离    

③ num<< 将下面num行(包括本行),向左移动一段距离     

④ :num,num1>> 将num行到num1行向右移动一段距离

复制代码

⑪ vim中批量添加注释命令


① 方法一:块选择模式(常用模式)

    批量注释:
        1、ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,

        2、再按大写的 I 进入行首插入模式输入注释符号;例如:#号或者//(双斜线)

        3、输入完毕之后,按两下 ESC,Vim会自动将你选中的所有行首都加上注释,可能需要等上几秒钟
        
    批量取消注释:
        1、ctrl + v 进入块选择模式,选中你要删除的行首的注释符号

        2、按 d 即可删除注释
        
② 方法二:替换命令(底线命令模式)

    批量注释:
        :start,edns/^/注释符/g  -- start:起始行号;end:结束行号:注释符:#或者//
    
    取消注释:
       :start,edns/^注释符//g   -- start:起始行号;end:结束行号:注释符:#或者//
复制代码

vim中批量添加注释命令

⑫ 块选择命令

  ① ctrl + v 进入块选择模式,光标移动你要选中的单词
  
  ② 根据 h j k l来选中你需要的模块
  
  ③ 就可以对选中的数据进行各种操作了
复制代码

块选择命令

⑬ 显示和取消行号

① :set nu    显示行号 也可以输入 set number

② :set nonu  取消行号


复制代码

⑭ 设置文件内容自动缩进

① :set ai   开启自动缩进

② :set noai 关闭自动缩进

复制代码

查找到的文本高亮显示

① :set hlsearch   开启文本高亮

② :set nohlsearch 关闭文本高亮
复制代码

⑮ 多个文件一起编辑

➜~ vim filename1 filename2 filename3 ...  -- 打开多个文件,默认打开第一个

① :prev 切换到上一个文件

② :N    切换到上一个文件

③ :next 切换到下一个文件

④ :n    切换到下一个文件

⑤ :last 切换到最后一个文件

⑥ :first 切换到第一个文件

⑦ :qa :全部退出

复制代码

多个文件一起编辑

⑯ 多窗口功能

## 注意使用

① :sp filename 水平打开一个新窗口,显示新文件,若只输入:sp,则两窗口显示同一个文件

② ctrl+w + s   水平拆分窗口 

③ ctrl+w + v   垂直拆分窗口

④ ctrl + w + j 光标移动到下方窗口

⑤ ctrl + w + k 光标移动到上方窗口

⑥ ctrl + w + q 离开当前窗口

### 演示如下图:

复制代码

多窗口功能

总结

以上就是我最近几年来经常使用的一些vim命令,记住是常用的命令哦!记得要多多的使用哦~~~

文章分类
后端
文章标签