上个月组内来了一个新的小伙伴,赶巧那个时候我休假了!当我休完假来的时候,这个新小伙伴成了我同桌,然后就是一起做项目咯。就在昨天我们在配置环境,修改各种配置文件的时候;小伙伴看到我各种vim的快捷指令使用,有点惊讶了:“卧槽,你怎么做到记得这么清楚的?这谁能记得住?教教我呗?”。
其实很简单:多写多用多练,例如:之前的一个同事,写代码只用vim编辑模式,我就是从这来学来的。
关于liunx下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
### 还有很多的命令
我们都知道vim是有三种状态,分别是命令行模式(command mode
)、输入模式(Insert mode
)和底线命令模式(last line mode
),这 3 种工作模式可随意切换,如下图所示:
我们使用vim编辑文件的时候,默认进入文件是命令行模式;在此模式下,可以使用键盘上的方向键:上
、下
、左
、右
键 或者 k
、j
、h
、l
移动光标的位置;当然我们也可以使用快捷键对文件内容进行复制、粘贴、删除、替换等等一系列操作。 常用的几个命令:
### 命令行模式下,比较常用的几个命令:
i 切换到输入模式,以输入字符 -- 最最常用
x 删除当前光标所在处的字符
X 删除当前光标前一个字符
: 切换到底线命令模式,以在最底一行输入命令
dd 移动光标到某一个位置,删除一整行数据命令
o 在当前行的下面另起一行,并变为输入模式
shift+g 跳转到文件末尾
gg 跳转到文件首行g
下图所示是vim处于命令行模式的状态示意图。
在vim 输入模式下,可以对有写入权限
的文件进行写操作;跟我们平常在编辑器中开发基本一样了。那么我们通常在命令模式下直接通过命令进入输入模式:i
、I
、a
、A
、o
、O
等插入命令就可以进入;当我们编辑完文件之后按esc键
就可以退出出入模式返回命令模式:
快捷键 | 功能描述 |
---|---|
i | 在光标的左侧输入文本,光标右侧文本向右移动 |
I | 在光标所在行的行首输入文本,相当于在行首执行了i命令 |
a | 在光标的右侧输入文本 |
A | 在光标所在行的尾部进行输入文本,相当于在光标行尾执行a命令 |
o | 在光标所在行的下一行增添新的一行,光标停留在新行的行首 |
O | 在光标所在行的上一行增添新的一行,光标停留在新行的行首 |
下图所示为vim处于输入模式模式下的示意图:
vim的底线命令模式:在命令模式下按:
(注意是英文冒号),此时vim的窗口左下方会出现一个:
符号,这时就已经进入了底线命令模式了。
注意:指令执行之后会把自动返回到命令行模式的。
作用:底线命令模式可以对文件中指定的内容进行保存、替换、查询、删除等等操作。
最最最常用指令快捷键如下图:
快捷键 | 功能描述 |
---|---|
:q | 退出vi编辑器 |
:q! | 不保存文件,直接退出vi编辑器 |
:w | 只保存文件,但不退出vi编辑器 |
:wq | 保存文件且退出vim编辑器 |
:start,endd | 从第start行开始到end行进行删除操作 最后一个d标识删除 |
:%d | 清空文件内容(跳到行首dG执行也可删除) |
:! command | 暂时离开vim编辑器去到指令模式下执行 command 命令显示结果 |
:%d | 清空文件内容(跳到行首dG执行也可删除) |
下图所示为vim进入底线命令模式后的操作状态图:
PS:大家可以关注一下gif图形,每一个操作动画都会带有命令;注意观看
① 正常打开一个文件默认光标在第一行
➜ ~ vim filename -- filename指文件名
② 正常打开一个文件默认光标在文件尾部
➜ ~ vim + package.json -- package.json打开的文件名或者文件路径
③ 正常打开一个文件默认让光标定位在第几行
➜ ~ vim +num package.json -- num 标识光标定位到第几行
① 字符移动命令
① h 将光标向左移动一格
② j 将光标向下移动一格
③ k 将光标向上移动一格
④ l 将光标向右移动一格
### 注意注意
这些移动的指令我们也可以带上一次移动多少,例如:2j -- 表示向下移动2格
② 单词移动命令
① 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命令,记住是常用的命令哦!记得要多多的使用哦~~~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。