Vim 命令

Vim 是 Unix/Linux 系统最好的文本编辑器,在没有熟练之前,可能没这个感觉。下面整理相关命令,作为个速查表吧。

模式

  • 命令模式(Command mode)
    • 首次启动 vim,便是命令模式
    • 输入模式时候,按 ESC 进入
  • 输入模式(Insert mode)
    • ioa 键进入
    • 窗口左下角有 -- INSERT -- 的字样
  • 底线命令模式(Last line mode):在命令模式下按下 : (英文冒号)

文件操作

  • vim a.txt 打开或新建文件,并将光标置于第一行首
  • vim a.txt b.txt 编辑多个文件
  • vim +n a.txt 打开文件,并将光标置于第 n 行首(n 为数字)
  • vim + a.txt 打开文件,并将光标置于最后一行首
  • vim +/pattern a.txt 打开文件,并将光标置于第一个与 pattern 匹配的字符串处
  • vim -r a.txt 在上次正用 vim 编辑时发生系统崩溃,恢复文件
  • :e <path/to/file> 打开一个文件
  • :e! 放弃修改,重新载入该文件
  • :q 退出 vim
  • :q! 退出不保存, :qa! 强行退出所有正在编辑的文件(即使有修改)
  • :w 保存当前文件
  • :wq , ZZ 保存退出
  • :saveas <path/to/file>, :w <path/to/file>另存为
  • :bn:bp 当同时打开多个文件,使用这两个命令来上下切换文件
  • :r <path/to/file><path/to/file> 文件内容插入「光标」所在行后面
  • :! <command> 暂时离开 vim 到指令行模式下执行 command 的显示结果
  • :r ! <command> 将命令 command 的输出结果插入「光标」所在行后面

光标操作

  • h, j, k, l 相当于键盘 ← ↓ ↑ → 移动一个字符
    • nh, nj, nk, nl 则按对应方向移动 n 个字符
    • n回车键 向下移动 n 行
  • H, M, L 光标移至「屏幕」的 顶行 中间行 尾行
  • 当前行:
    • 0, $行头, 行尾
    • w, e, b 对应向 , , 移动一个单词(首/尾)
    • fa, 3fa第一, 第三 个为 a 的字符处, fb, fs 等以此类推,F 相反方向
    • ta, 3ta第一, 第三 个为 a 的前字符处, tb, ts 等以此类推,T 相反方向
    • 10空格键 向后面移动 10 个字符
  • 整个内容
    • gg, G 到内容 顶部 尾部
    • 10G 移动到内容的第 10
  • 段落
    • {, } 移动到段落的 开头 结尾
    • (, ) 移动到句子的 开头 结尾

屏幕操作

  • 翻页:ctrl+f, ctrl+d 屏幕对应向 移动 一页 半页
  • 翻页:ctrl+b, ctrl+u 屏幕对应向 移动 一页 半页
  • 翻行:ctrl+e, ctrl+y 屏幕对应向 移动一行

窗口操作

  • :split 分割一个窗口
  • :split a.c 为另一个文件 a.c 分隔窗口
  • :n split a.c 为另一个文件 a.c 分隔窗口,光标移至 n 行
  • ctrl+w 窗口切换
  • :close 关闭当前窗口

文本操作

插入

  • i, I 对应在光标前, 当前行首 插入
  • a, A 对应在光标后, 当前行尾 插入
  • o, O 对应在当前行之, 新开一行插入
  • r 替换当前字符
  • R 替换当前字符及其后的字符,直至按 ESC 键

删除

  • 字符
    • s 删除光标所在字符,然后进入输入模式
    • S, cc删除光标所在行,然后进入输入模式
    • x, X 对应向 , 删除一个字符
    • 10cw 删除 10 个字符,然后进入输入模式
    • dnh, dnl, 删除 n 个字符
  • 单词
    • dw 删除一个单词(删除光标位置到下一个单词开始的位置)
    • dnw 删除 n 个单词
    • nC 删除当前行及其后 n-1 行,然后进入输入模式
    • dd 删除一行
    • d$, do 删至行尾, 行首(n
    • ndd 删除 n 行(从当前行算起)
    • :n1, n2 d 删除 n1 行到 n2 行之间的内容
    • dnj, dnk, 删除 n 行
    • J 删除行尾的换行符

搜索

  • /word, ?word 当前行向, 寻找一个名称为 word 的字符串
  • n, N, 重复前一个搜寻的动作
  • :n1,n2 s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2
    • :%s/word1/word2/g 全文寻找 word1 字符串,并将该字符串取代为 word2
    • :%s/word1/word2/gc 全文寻找 word1 字符串,并将该字符串取代为 word2,取代前需确认提示

复制/粘贴

  • yy 复制当前行
  • nyy 复制当前行向下 n 行(20yy:复制 20 行)
  • y1G 复制当前行到首行的所有数据
  • yG 复制当前行到尾行的所有数据
  • y0 复制光标所在的那个字符到该行行的所有数据
  • y$ 复制光标所在的那个字符到该行行的所有数据
  • p, P 粘贴至当前行的下一行, 上一行
  • np 粘贴文本 n 次
  • :n1,n2 co n3 n1~n2行的内容拷贝到第 n3 行下
  • :n1,n2 m n3 n1~n2行的内容移至到第 n3 行下

撤销/重做

  • u 复原前一个动作
  • ctrl+r 重做上一个动作
  • . 重复前一个动作

自动提示

  • ctrl+nctrl+p,在 insert 模式下
    • 未输入,则有提示菜单
    • 输入一个词的开头,则可自动补齐功能

Visual 模式

  • v 进入 -- VISUAL -- 模式
  • V 进入 -- VISUAL LINE -- 模式
  • 块操作(批量插入字符)
    • ctrl + v 进入块选择模式
    • 移动光标选中需要操作的行
    • 大写的 I 进入「行首」插入模式输入 (如果批量删除,可以按 d
    • 输入完,按两下ESC

行方式命令

即底线命令模式,列一些常用命令:

  • :n1,n2 co n3 n1~n2行的内容拷贝到第 n3 行下
  • :n1,n2 m n3 n1~n2行的内容移至到第 n3 行下
  • :n1,n2 d 删除 n1 行到 n2 行之间的内容
  • :n1,n2 w!command 将文件中 n1 行至 n2 行的内容作为 command 的输入并执行之
  • :n1,n2/^/注释符/g n1~n2 行加注释符, 例如::10,20s#^#//#g 在 10~20 行添加 // 注释
  • :n1,n2/^注释符//g n1~n2 取消注释符, 例如::10,20s#^//##g 在 10~20 行取消 // 注释

  • q[a-z] 把操作记录在寄存器 [a-z](命名),q 停止录制
  • @[a-z] 在当前光标处执行宏[a-z]
  • @@ 在当前光标处执行最新录制的宏
  • reg 显示当前定义的所有的宏

例子:

  • vim a.txt 新建 a.txt, 写入 1
  • qa 开始录制
  • Yp 复制行
  • ctrl+a 增加 1
  • q 停止录制
  • @a 1 下面写下 2
  • @@ 2 下面写下 3
  • 10@@ 创建新的 10 行,并把数据增加到 13.

配置

配置文件在 /usr/share/vim/vimrc,这是系统级的 vimrc 配置文件,为了保证 vim 的正常运行,一般并不会修改这个文件,而是应该在自己的用户目录下(~ 下)创建一个新的用户级 vimrc 文件

$ vim ~/.vimrc

# ------- .vimrc 内容(# 注释不要放) -------
# 设置行号
set number

# 语法高亮
syntax on

# 缩进
filetype plugin indent on

底线命令模式

  • :set rulerset noruler 显示/不显示标尺
  • :set hlsearch 高亮显示查找到的单词
  • :set nohlsearch 关闭高亮显示
  • :syntax on 语法高亮
  • :set nu 显示行号
  • :set nonu 不显示行号
  • :set ignorecase 搜索时忽略大小写
  • :set smartcase 搜索时匹配大小写
  • :set ruler 显示光标位置坐标
  • :set hlsearch 搜索匹配全高亮
  • :set tabstop=8 设置tab大小,8为最常用最普遍的设置
  • :set softtabstop=8 4:4个空格,8:正常的制表符,12:一个制表符4个空格,16:两个制表符
  • :set autoindent 自动缩进
  • :set cindent C语言格式里面的自动缩进
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容