前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员必备vim编辑器命令,你想要的我都整理好了(建议收藏)

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

原创
作者头像
我是阿沐
修改2021-07-08 14:29:08
9030
修改2021-07-08 14:29:08
举报

前言

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

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

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

01 vim配置文件

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

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

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

代码语言:javascript
复制
 ① 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

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

代码语言:javascript
复制
" 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 种工作模式可随意切换,如下图所示:

02.1 vim命令行模式

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

代码语言:javascript
复制
### 命令行模式下,比较常用的几个命令:

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

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

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

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

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

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

shift+g 跳转到文件末尾

gg 跳转到文件首行g

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

02.2 vim输入模式

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

快捷键

功能描述

i

在光标的左侧输入文本,光标右侧文本向右移动

I

在光标所在行的行首输入文本,相当于在行首执行了i命令

a

在光标的右侧输入文本

A

在光标所在行的尾部进行输入文本,相当于在光标行尾执行a命令

o

在光标所在行的下一行增添新的一行,光标停留在新行的行首

O

在光标所在行的上一行增添新的一行,光标停留在新行的行首

下图所示为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的常用命令+快捷键

代码语言:javascript
复制
PS:大家可以关注一下gif图形,每一个操作动画都会带有命令;注意观看
03.1 vim打开文件命令

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

代码语言:javascript
复制
➜  ~ vim filename  -- filename指文件名

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

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

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

代码语言:javascript
复制
➜  ~ vim +num package.json -- num 标识光标定位到第几行
03.2 vim命令模式下,光标移动

① 字符移动命令

代码语言:javascript
复制
① h 将光标向左移动一格

② j 将光标向下移动一格

③ k 将光标向上移动一格

④ l 将光标向右移动一格

### 注意注意

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

② 单词移动命令

代码语言:javascript
复制
① w 将光标向右移动到下一个单词的词首

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

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

③ 首尾行移动命令

代码语言:javascript
复制
① $ 将光标移动到当前行的尾部

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

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

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

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

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

首尾行移动命令

④ 退出命令

代码语言:javascript
复制
① :wq 保存文件且退出vi编辑器

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

③ :q  退出vi编辑器

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

⑤ ZZ  保存文件且退出vi编辑器

⑤ 翻页键命令

代码语言:javascript
复制
① ctrl+d 将光标向下翻半屏,通常每次翻屏12行

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

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

④ ctrl+b 将光标向上翻满屏,通常每次翻屏24行
翻页键命令
翻页键命令

翻页键命令

⑥ 剪切和粘贴键命令

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

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

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

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

剪切和粘贴键命令

⑦ 文本修改键命令

代码语言:javascript
复制
① x  删除光标位置指定的字符

② dd 删除光标所在的行

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

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

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

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

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

文本修改键命令

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

代码语言:javascript
复制
① :/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

### 下面简单的操作下
搜索替换命令
搜索替换命令

搜索替换命令

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

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

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

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

⑩ 删除文本单词命令

代码语言:javascript
复制
① dw  删除当前光标后面的一个单词

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

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

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

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

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

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

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

d指令换成c指令效果是一样的,只是操作完会变成insert模式
删除文本单词命令
删除文本单词命令

删除文本单词命令

⑩ 文本内容移动命令

代码语言:javascript
复制
① >>    向右移动本行一段距离 

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

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

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

⑪ vim中批量添加注释命令

代码语言:javascript
复制
① 方法一:块选择模式(常用模式)

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

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

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

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

    批量注释:
        :start,edns/^/注释符/g  -- start:起始行号;end:结束行号:注释符:#或者//
    
    取消注释:
       :start,edns/^注释符//g   -- start:起始行号;end:结束行号:注释符:#或者//
vim中批量添加注释命令
vim中批量添加注释命令

vim中批量添加注释命令

⑫ 块选择命令

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

块选择命令

⑬ 显示和取消行号

代码语言:javascript
复制
① :set nu    显示行号 也可以输入 set number

② :set nonu  取消行号

⑭ 设置文件内容自动缩进

代码语言:javascript
复制
① :set ai   开启自动缩进

② :set noai 关闭自动缩进

查找到的文本高亮显示

代码语言:javascript
复制
① :set hlsearch   开启文本高亮

② :set nohlsearch 关闭文本高亮

⑮ 多个文件一起编辑

代码语言:javascript
复制
➜~ vim filename1 filename2 filename3 ...  -- 打开多个文件,默认打开第一个

① :prev 切换到上一个文件

② :N    切换到上一个文件

③ :next 切换到下一个文件

④ :n    切换到下一个文件

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

⑥ :first 切换到第一个文件

⑦ :qa :全部退出

⑯ 多窗口功能

代码语言:javascript
复制
## 注意使用

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

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

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

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

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

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

### 演示如下图:
多窗口功能
多窗口功能

总结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 01 vim配置文件
  • 02 vim的基本概念概述
    • 02.1 vim命令行模式
      • 02.2 vim输入模式
        • 02.3 vim底线命令模式
        • vim的常用命令+快捷键
          • 03.1 vim打开文件命令
            • 03.2 vim命令模式下,光标移动
            • 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档