vim教程

  版权声明本文章参考了《鸟哥的Linux私房菜》《Linux命令手册》《Linux命令大全》以及《Linux man pages》未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!


1 vim的三种模式

  • 普通模式——打开文件后就直接进入普通模式,可用『上下左右按键』来移动光标,你可以使用『删除字符』或『删除整列』来处理文件内容, 也可以使用复制、粘贴来处理你的文件数据。还可以『搜索替换』。
  • 编辑模式——在普通模式中按下『i, I, o, O, a, A, r, R』等任何一个之后就进入编辑模式。在编辑模式中按『Esc』键返回普通模式。
  • 命令模式——在普通模式中,按下『:』,就进入命令模式。在命令模式中按『Esc』键返回普通模式。

2 按键与命令说明

2.1 移动光标

按键 或 命令作用备注
[n]h 或 [n]←光标向左移动n列,缺省为1不能换行
[n]j 或 [n]↓光标向下移动n行,缺省为1
[n]k 或 [n]↑光标向上移动n行,缺省为1
[n]l 或 [n]→光标向右移动n列,缺省为1不能换行
CTRL + f向前翻页,相当于Page Down
CTRL + b向后翻页,相当于Page Up
CTRL + d向前翻半页
CTRL + u向后翻半页
CTRL + e编辑窗口中的文件内容整体上移一行。
CTRL + y编辑窗口中的文件内容整体下移一行。
[n]-光标向上移动n行并在行首,缺省为1
[n]+ 或 [n]ENTER光标向下移动n行并在行首,缺省为1
n + SPACE向后移动n个字符,缺省为1能换行
^ 或 HOME 或 0移动到行首字符
$ 或 END移动到行尾字符
H光标移动到当前窗口第一行行首
M光标移动到当前窗口中间行行首
L光标移动到当前窗口最后一行行首
G移动到文件的最后一行行首
nG 或 :n光标移动到n行行首
gg光标移动到文件的第一行行首
[n]z + ENTER把第n行移动到屏幕顶部,缺省为当前行
[n]z.把第n行移动到屏幕中间,缺省为当前行
[n]z-把第n行移动到屏幕底部,缺省为当前行
zt把当前行移动到屏幕第一行
zz把当前行移动到屏幕中间
zb把当前行移动到屏幕最后一行
w将光标右移到下一个词的词首
b将光标左移到上一个字的词首
e把光标移至当前词(或下一个词)的词尾
W同w,只是以空白符作为字的分隔符
B同b,只是以空白符作为字的分隔符
E同e,只是以空白符作为字的分隔符
fx往右移动到 x 字符上
Fx往左移动到 x 字符上tx
Tx往左移动到 x 字符后
;分号,配合 fx Fx tx Tx 使用,重复一次
,逗号,配合 fx Fx tx Tx 使用,反方向重复一次

2.2 查找与替换

按键 或 命令作用
*向后搜索当前单词
#向前搜索当前单词
/[OPTION]regex_pattern[/ige]向后搜索,vim真这个表达式请看第3节。i,忽略大小写;e,不显示错误。
?[OPTION]regex_pattern[/ige]向前搜索,g全局替换,否则只替换每行的第一个匹配项;
n下一个
N上一个
:s/[OPTION]pattern/[OPTION]str[/ingce]用str替换当前行的匹配项。c,询问是否替换。n不替换而显示匹配数量
:n1,n2s/[OPTION]regex_pattern/[OPTION]str[/ignce]用str替换n1-n2行匹配pattern的字符串。str中可以引用匹配结果
:n1,[$]s/[OPTION]regex_pattern/[OPTION]str[/ignce]用str替换n1行到最后一行匹配pattern的字符串,str中可以引用匹配结果
:,n2s/[OPTION]regex_pattern/[OPTION]str[/ignce]用str第1行到第n2行匹配pattern的字符串。str中可以引用匹配结果
:%s/[OPTION]regex_pattern/[OPTION]str[/ignce]用str替换所有匹配pattern的字符串。str中可以引用匹配结果
rx用x替换当前光标所在字符
R将光标所在字符及后续字符替换为输入的字符,直到按ESC键
匹配模式选项
\v要在查找或替换中完全使用正则表达式
\V表示完全不使用正则表达式,但斜杠和反斜杠还是需要转义
替换模式选项
\l在替换字符中表示将分组第一个转换成小写
\L在替换字符中表示将分组转换成小写
\u在替换字符中表示将分组第一个转换成大写
\U在替换字符中表示将分组转换成大写

2.3 插入、添加

按键 或 命令作用
a从光标后面开始添加文本
A从光标所在行的末尾开始添加文本
i从光标前面开始插入文本
I从光标所在行的开始处插入文本
o在目前光标所在的下一列处插入新的一列
O在目前光标所在处的上一列插入新的一列

2.4 剪切、复制与粘贴

按键 或 命令作用
[n]x剪切光标所在字符及其右边n-1个字符,缺省为1
[n]X剪切光标左边的n个字符,缺省为1
[n]dd剪切从光标行及后面n-1行,缺省为1
dnG剪切第n行到光标所在行
dG剪切光标所在到最后一行的所有数据
d$ 或 D删除光标所在处到该行的最后一个字符
d0剪切光标所在处到该行的第一个字符
[n]yy复制从光标行及后面n-1行,缺省为1
ynG复制第n行到光标所在行
yG复制光标所在到最后一行的所有数据
y$ 或 D复制光标所在处到该行的最后一个字符
y0复制光标所在处到该行的第一个字符
p小写,粘贴到光标所在行之后
P大写,粘贴到光标所在行之前

2.5 撤销与重做

按键 或 命令作用
u撤销
CTRL+ r重做

2.6 块操作

按键 或 命令作用
v字符选择,会将光标经过的地方反白选择
V行选择,会将光标经过的行反白选择
CTRL + v区块选择,可以用长方形的方式选择
y将反白的地方复制
d将反白的地方剪切
p将刚刚复制的区块,粘贴到光标位置
P大写,将刚刚复制的区块,粘贴到光标之前

2.7 保存与退出

按键 或 命令作用
:q在未修改文档的情况下退出vim
:q!放弃文档的修改,强行退出
:w文档存盘
:wq文档存盘退出
:x存盘退出
ZZ若文件未改动,则离开,若文件已改动,则储存后离开!
:w [filename]将编辑的数据储存成另一个文件(类似另存新档)
:r [filename]在当前行之后,读入另一个文件
:n1,n2 w [filename]将 n1 到 n2 的内容储存成 filename 这个文件。
:! command调用shell执行命令command

2.8 其它操作

按键 或 命令作用
.重复前一个动作
:help command查看命令command的帮助提示
:%!xxd以十六进制模式查看
:%!xxd –r返回文本模式
q:历史命令
CTRL+s在编辑过程中使 vim 处于僵死状态,
CTRL+q恢复编辑状态。
vim +n file打开文件时光标定位到file的第 n 行
vim +/string file打开文件时光标定位到第一个string 处
gg=G可以自动对齐
  

2.9 同时移动多行

按键 或 命令作用
>>或<<单行右移或左移
n> 或 n <visual模式下选中内容后,右移或左移n次,
:n,m>[>…] 或 :n,m<[<…]行n到行m左移或右移一次。。。

2.10 多窗口

按键 或 命令作用
:new file再打开一个 vim,是横向的
:vnew file再打开一个 vim,是纵向的
:sp [file]新建窗口。横向的
:vsp [file]新建窗口。纵向的
CTRL+w,CTRL+w两个窗口之间进行切换
CTRL+w+j|k|k|↓ |↑切换到上一个或者下一个窗口

2.11 补全

按键 或 命令作用
ctrl+x,ctrl+n通过目前正在编辑的这个『文件的内容』作为关键词,予以补齐
ctrl+x,ctrl+f以当前目录内的『文件名』作为关键词,予以补齐
ctrl+x,ctrl+o以扩展名作为语法补充,以 vim 内建的关键词,予以补齐

3 vim中的正则表达式

  • vim中字符集用[[:class:]]表示
  • vim正则表达式与基本正则表达PREs式基本一致。请参考《正则表达式详解》。差异如下表:
描述vimPREs
匹配[a-z]\l不支持
匹配[^a-z]\L不支持
匹配[A-Z]\u不支持
匹配[^A-Z]\U不支持
匹配 / 字符需要转义/
匹配 空格 字符需要转义不需要转义
匹配0-1个\?\=?
匹配n-m个\{n,m}\{n,m\}{n,m}
匹配n个\{n}\{n\}{n}
匹配至少n个\{n,}\{n,\}{n,}
匹配至多m个\{,m}\{,m\}{,m}
匹配分组,并存放匹配结果,可用\n来引用。\(\)()
匹配分组,不存放匹配结果,不可用\n来引用。\%(expr\)(?:expr)
非贪婪\{-n,m}限定符?
匹配时包含换行符\_元字符不支持
正向肯定预察(exp)\@=(?=exp)
正向否定预察(exp)\@!(?!exp)
逆向肯定预察\@<=(exp)(?<=exp)
逆向否定预察\@<!(exp)(?<!exp)
固化分组(\@>expr)(?>expr)
占有量词不支持限定符+

4 存档与恢复

  vim打开文件后会在当前目录自动建立一个记录操作的文件.filename.swp的文件。当多个人打开同一个文件或vim非正常退出时,会出现提示:

  • 只读打开,O
  • 正常打开,E
  • 恢复,R
  • 删除,D
  • 退出,Q
  • 终止,A

5 环境配置

命令作用
:set显示所有不同于缺省值的选项
:set all显示除了终端设置以外的所有选项
set termcap显示所有的终端选项。注意在GUI里,不会显示键码,因为它们是内部生成的,无法改变。而且 GUI里即使修改终端代码也没用
:set option?显示 option的值。
:set optionbool选项:置位,打开。数值选项:显示其值。字符串选项:显示其值
:set nooption切换选项: 复位,关闭。
:set option!切换选项,反转其值,Vi 无此功能
:set option&复位选项为其缺省值。
:set option&vi复位选项为 Vi 的缺省值。Vi 无此功能}
:set option&vim复位选项为 Vim 的缺省值。Vi 无此功能}
:set all&设置所有除了终端设置的选项为其缺省值。
:set option=value设置字符串或数值选项的值为 value
:set option:value设置字符串或数值选项的值为 value。
:set option+=value把value加到数值选项里,或者附加到字符串选项之后。 如果选项是逗号分隔的列表,除非原来的值为空,会加上一个逗号。如果选项是标志位的列表,删除多余的标志位。如果加入已经存在的标志位,选项值不变
:set option^=value把value乘到数值选项里,或者附加到字符串选项之前。如果选项是逗号分隔的列表,除非原来的值为空,会加上一个逗号。
:set option-=value把value从数值选项里减去,或者从字符串选项里删除,如果该值原来存在的话。如果不存在,不会有错误或者警告。如果选项是逗号分隔的列表,除非新值为空,删除一个逗号。如果选项是标志位的列表,value 必须和选项里出现的顺序完全相同。一个一个地分别删除标志位可以解决这个问题。
verbosebool选项用于查看当前操作的相关信息
常用选项或参数http://blog.csdn.net/liao20081228/article/details/78808126#t14
          

6 DOS与Linux转换——dos2unixunix2dos

  windows换行符号为^M$也就是CR和LF,而Linux下的换行符为$,也就是LF。

  命令:dos2unix [-kn] file
     unix2dos [-kn] file
  描述:DOS与Linux转换.

常用选项作用备注
-k保留该文件原本的 mtime 时间格式
-n保留原本的旧档,将转换后的内容输出到新文件
更多信息http://linux.51yip.com/search/dos2unix
    http://man.linuxde.net/dos2unix
http://linux.51yip.com/search/unix2dos
    http://man.linuxde.net/unix2dos
man 手册

7 语言编码转换——iconv

  命令:iconv -f 原编码 -t 新编码 filename [-o newfile]
  描述:转变语言编码方式

常用选项作用备注
–list列出 iconv 支持的语言数据
-f原本编码格式;
-t新编码格式;
-o file如果要保留原本的文件,那么使用 -o 新档名,可以建立新编码文件。
更多信息http://linux.51yip.com/search/iconv
    http://man.linuxde.net/iconv
man 手册

  版权声明本文章参考了《鸟哥的Linux私房菜》《Linux命令手册》《Linux命令大全》以及《Linux man pages》未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝月心语

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值