11. vim备查の小手札

三种模式

命令模式(默认)      command mode:移动光标,剪切/粘贴文本
插入(编辑)模式         edit mode:修改文本
扩展命令模式 extended command mode:保存,退出等

命令格式

vim [OPTION]... FILE...
OPTION 解释说明
+# 打开文件后,直接让光标处于第#行的行首
vim + file 直接打开file,光标在最后一行
+/PATTERN 打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
vim –b file 二进制方式打开文件
vim –d file1 file2… 比较多个文件(可用ctrl+w在各个窗口间移动,打开的三个文件都可以修改,保存需逐个进行)
vim -m file 只读打开文件(强制命令!也不好使)
ex file 或 vim –e 直接进入仅ex模式(不可视)

模式转换

命令 说明
ESC 插入/扩展模式 —-> 命令模式
: 命令模式 —-> 扩展模式
CTRL+s,Ctrl+q 锁定和解锁

命令模式–>插入模式

命令 说明
i insert, 在光标所在处输入(shift+s也可以)
I 在当前光标所在行的行首输入
a append, 在光标所在处后面输入
A 在当前光标所在行的行尾输入
o 在当前光标所在行的下方打开一个新行
O 在当前光标所在行的上方打开一个新行
ZZ 保存退出
ZQ 不保存退出

## 扩展模式

命令 说明
q 退出
q! 强制退出,丢弃做出的修改
wq 保存退出
x 保存退出
w 写(存)磁盘文件
r filename 读文件内容到当前文件中
w filename 将当前文件内容写入另一个文件
!command 在编辑文件过程中,临时执行某命令而不需退出文件编辑
r!command 执行某命令,将其结果读入当前编辑文件的光标处后

命令模式

光标跳转

命令 说明
h
l
j
k
#h/l/j/k 向指定方向跳转#个字符
w 下一个单词的词首
e 当前或下一个单词的词尾
b 当前或前一个单词的词首
#w/e/b 向指定方向跳转#个单词数
H 当前页页首
M 当前页页中间行
L 当前页页底
^ 跳转至行首的第一个非空白字符;
0 跳转至行首
$ 跳转至行尾
#G、扩展模式:# 跳转至由#指定行
G 最后一行
1G, gg 第一行
) 下一句
( 上一句
} 下一段
{ 上一段
Ctrl+f 向文件尾部翻一屏
Ctrl+b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+u 向文件首部翻半屏

字符编辑

命令 说明
x 删除光标处的字符(实际上类似于剪切);
#x 删除光标处起始的#个字符
xp 交换光标所在处的字符及其后面字符的位置
~ 转换大小写
r 替换光标所在处的字符
R 切换成REPLACE模式
d 删除命令,可结合光标跳转字符,实现范围删除;(并未真正删除,实际上类似于剪切);
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dw 删除光标位至下个单词词首
de 删除光标位到本词或下个单词词尾
db 删除光标位到本词或下个单词词首
#COMMAND 删除#指定的内容(如:15d0,表示向前删除本行15个字符,若不足15个字符也不向上扩展)
dd 删除光标所在的行
#dd 多行删除
D 从当前光标位置一直删除到行尾,留空行,等同于d$
y 复制yank,行为相似于d命令
y$ 复制到行尾
y0 复制到行首
y^ 复制到非空行首
ye 复制光标位到本词或下个单词词尾
yw 复制光标位至下个单词词首
yb 复制光标位到本词或下个单词词首
#COMMAND 复制#指定的内容()
yy 复制行
#yy 复制多行
Y 复制整行
p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
c 修改后切换成插入模式
c$ 删除当前光标到行尾,并切换成插入模式
c^ 删除当前光标到非空行首,并切换成插入模式
c0 删除当前光标到行首,并切换成插入模式
cb 删除光标位到本词或下个单词词首,并切换成插入模式
ce 删除光标位到本词或下个单词词尾,并切换成插入模式
cw 删除光标位至下个单词词首,并切换成插入模式
#COMMAND 删除#指定的内容,并切换成插入模式(如:3c0,表示向前删除本行3个字符,若不足15个字符也不向上扩展)
cc 删除当前行并切换至插入模式,输入新内容
#cc 删除多行并切换至插入模式,以输入新内容
C 删除当前光标到行尾,并切换成插入模式
gU 变大写
gu 变小写
<start position><command><end position> 对于y/d/gU/gu,可以使用该组合,如0y$,^gU$等;
100iwang[ESC] 粘贴 wang 100次
u 撤销最近的更改
#u 撤销之前多次更改
U 撤消光标落在这行后所有此行的更改
Ctrl+r 重做最后的“撤消”更改
. 重复前一个操作
n. 重复前一个操作n次

扩展模式

地址定界

地址定界 编辑命令(d/y/w/r)
    w file: 将范围内的行另存至指定文件中
    r file:在指定位置插入指定文件中的所有内容
命令 说明
start_pos,end_pos
# 具体第#行,例如2表示第2行;
#,# 从左侧#表示行起始,到右侧#表示行结尾
#,+# 从左侧#表示的行起始,加上右侧#表示的行数
2,+3 表示2到5行
. 当前行
$ 最后一行
.,$-1 当前行到倒数第二行
% 全文, 相当于1,$
/pat1/,/pat2/ 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
#,/pat/ 从指定行开始,到第一次匹配pat的行结束
/pat/,$ 从第一次匹配pat的行开始,到最后一行结束

查找

命令 说明
/PATTERN 从当前光标所在处向文件尾部查找
?PATTERN 从当前光标所在处向文件首部查找
n 与命令同方向
N 与命令反方向
s/要查找的内容/替换为的内容/修饰符 在扩展模式下完成查找替换操作()

查找替换

s/要查找的内容/替换为的内容/修饰符
    (分隔符/可用其他字符替换)
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
修饰符:        
    i : 忽略大小写        
    g : 全局替换;默认情况下,每一行只替换第一次出现        
    gc: 全局替换,每次替换前询问

寄存器

命名/无命名寄存器(a~z表示26个命名寄存器、1个命名寄存器)

26个命名寄存器(a~z表示)和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。未指定,将使用无命名寄存器。
格式:
    [数字]["寄存器][命令]如:    3"tyy 表示复制3行到t寄存器中
      "tp 表示将t寄存器内容粘贴

数字寄存器(0~9表示)

有10个数字寄存器,用0,1,…,9表示,0存放最近复制内容,1存放最近删除内容。
当新的文本变更和删除时,1转存到2,2转存到3,以此类推。
数字寄存器不能在不同会话间共享。

编辑二进制文件

vim –b binaryfile   以二进制方式打开文件
    %!xxd   :扩展命令模式下,利用xxd命令转换为可读的十六进制
    %!xxd –r:扩展命令模式下,利用xxd命令转换回二进制

可视化模式

该模式允许选择的文本块:
                     v 面向字符
                     V 面向行
                ctrl+v 面向块
可视化键可用于与移动键(如:w,e,b,),},箭头等)结合使用。
突出显示的文字可以被删除d,复制y,变更c,过滤,搜索/替换s等

多文件模式

vim FILE1 FILE2 FILE3 ...    
    :next 下一个    
    :prev 前一个    
    :first 第一个    
    :last 最后一个    
    :wall 保存所有    
    :qall 退出所有    
    :wqall

多“窗口”模式

  • 多文件分割

vim -o|-O FILE1 FILE2 ...
    -o: 水平分割    
    -O: 垂直分割
    在窗口间切换:Ctrl+w, Arrow
  • 单文件窗口分割:

Ctrl+w,s    : split, 水平分割
Ctrl+w,v    : vertical, 垂直分割
ctrl+w,q    :取消相邻窗口
ctrl+w,o    : 取消全部窗口

定制vim的工作特性

  • 配置文件:永久有效

    全局:/etc/vimrc
    个人:~/.vimrc
  • 扩展模式:当前vim进程有效

  • 配置项

(1) 行号
        显示:set number, 简写为set nu
        禁用:set nonumber, 简写为set nonu
(2) 括号成对匹配
        匹配:set showmatch, 简写为set sm
        禁用:set nosm
(3) 自动缩进
        启用:set ai
        禁用:set noai
(4) 高亮搜索
        启用:set hlsearch
        禁用:set nohlsearch
(5) 语法高亮
        启用:syntax on
        禁用:syntax off(6) 忽略字符的大小写
        启用:set ic
        禁用:set noic
(7) 文件格式
        启用:fileformat=unix
        禁用:fileformat=dos
(8) 设置文本宽度
        :set textwidth=65 (vim only)
        :set wrapmargin=15(9) 查看设定
        :set       查看当前设定
        :set all   查看所有选项

帮助

  • vi/vim内置帮助

    :help option-list   进入help的不同主题
    :helpgrep word      按关键字查找
    :help               查看帮助
    :q                  退出帮助
  • Vimtutor 练习使用

原创文章,作者:taobaibai,如若转载,请注明出处:http://www.178linux.com/37291

(0)
taobaibaitaobaibai
上一篇 2016-08-18
下一篇 2016-08-18

相关推荐

  • 关于文件 atime mtime gtime 专题–2016-07-27

    Linux文件组成部分:元数据(metadata)和数据(date) 元数据的查看方式:使用stat命令; 数据的查看方式:文本格式使用 cat nano查看及修改即可; stat命令: 功能说明:显示文件或文件系统的状态 语法: stat  [OPTION] …  FILE… 参数:   举例: [ro…

    Linux干货 2016-08-04
  • Homework week-5 grep及find

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; grep -E "^[[:space:]]+" /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; grep&nbsp…

    Linux干货 2016-09-06
  • java基础篇—内存分析

    Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现 同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。 1、多线程通信 1.1 内存模型 Java线程之间的通信由Java内存…

    Linux干货 2015-03-16
  • 第八周:网络基础知识和shell脚本练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别; 网桥:是连接两个局域网的基于MAC地址数据存储转发设备,工作于数据链路层 集线器:所有端口处于同一个广播域和冲突域中,带宽共享,工作于物理层 二层交换机:多端口网桥,一个端口一个冲突域,默认所有端口位于同一个广播域中,可以划分vlan,隔离广播域,带宽独享 三层交换机:具有路由功…

    Linux干货 2016-11-21
  • 链接分析算法之:HITS算法

     HITS(HITS(Hyperlink – Induced Topic Search) ) 算法是由康奈尔大学( Cornell University ) 的Jon Kleinberg 博士于1997 年首先提出的,为IBM 公司阿尔马登研究中心( IBM Almaden Research Center) 的名为“CLEVER”的研究…

    开发运维 2015-07-20
  • ansible学习笔记

    简介:  在日常服务器维护中,从系统安装到程序部署再到发布应用,在大规模的生产环境中,如果需要手动的每台服务器进行安装配置将会给运维人员带来许多繁琐而又重复的工作。这就促使了在每个运维层次中出现了不同的自动化运维工具。 常见的自动化运维工具分类有以下几类:  系统安装运维工具(OS Provisioning):    …

    Linux干货 2015-08-17