VIM入门及进阶

什么是VIM?

    VIM类似于Vi编辑器, 它是一个功能强大、可高度定制的文本编辑器, 是一个纯粹的自由软件。注意:vi和vim不完全相同

为什么要使用VIM?

    相信大多数人接触Linux时使用的第一个文本编辑器都不是VIM,很多人看到VIM复杂的命令操作就望而祛步了, 从而选择nano,gedit等较简单的文本编辑器, 但是熟悉使用VIM之后你真的就不想回去了!




VIM的用法:

    很多习惯使用Windows的朋友可能一开始难以接受VIM编辑器, 因为它实在是太"难"了, 纯命令操作, 但是很多经常使用Linux的朋友一般能快速上手。

VIM如何打开文件:  

vim [OPTION]... [FILE]...

如果不指定文件则进入以下界面

    blob.png

vim +2 /etc/passwd  ##使用vim打开/etc/passwd文件并且使光标处在第二行

vim PATTERN  /etc/passwd ## 使用vim打开/etc/passwd文件并且使光标处在指定模式匹配到的行上, 关于模式请自行查阅正则表达式的相应内容,这里不做阐述

VIM是一种模式化的编辑器, 分为以下4种模式:

命令模式:输入相应指令完成文本的编辑

输入模式:可直接输入字符

末行模式:VIM内建的命令行接口,功能强大

可视化模式:可选定字符通过相应指令执行对选定字符的操作



模式转换

 命令模式 –> 输入模式

   i:在所在光标前进入插入模式
   a:在所在在光标后进入插入模式
   o:在光标所在行下新建一行,并转到插入模式
    O;在光标所在行上新建一行,并转到插入模式
   I:直接跳到所在行的行首,并进入插入模式
   A:直接跳大所在行的行尾,并进入插入模式

 输入模式 –> 编辑模式

   按下ESC键退回到命令模式

 命令模式 –> 末行模式

   输入: 进入末行模式

 末行模式 –> 命令模式

   按下ESC键退回命令模式, 可能有时候需要按两下



关闭文件:

末行模式中:
    q:退出
    w:保存
    q!:强制退出
    wq:保存退出
    x:保存退出
命令模式下:
    ZZ:保存退出



光标跳转:

字符间跳转:

 h:左
 j:下
 k:上
 l:右
 #COMMAND:指定一次跳转的数量, 例如3h, 向左跳转3个字符

单词间跳转:

 w:后一个单词的词首
 e:当前或下一个单词的词尾
 b:当前或上一个单词的词首
 #COMMAND:同样可以通过#指定一次跳转的数量

行首尾跳转:

 ^:跳转到当前行的第一个非空白字符
 $:跳转到当前行的尾部
 0:跳转到当前行的首部

行间移动:

 #G:跳转到指定行
 G:跳转到最后一行
 gg,1G:跳转到第一行

句间移动:

):下一句
(:上一句
#COMMAND:同样可以通过#指定一次跳转的数量

段间移动:

}:下一段
{:上一段
#COMMAND:同样可以通过#制定一次跳转的数量



VIM的命令模式下的命令:


字符编辑:

x:删除当前光标所在的字符
#x:删除当前光标起始处的#个字符
xp:交换和光标所在字符后的字符的位置

替换命令:

r:替换当前光标所在字符

删除命令:

d:删除命令, 可结合光标跳转命令使用,来实现范围删除
例如:dw删除一个单词, dG删除当前光标所在行到最后一行
dd:删除整行
D:删除光标当前所在行并保存当前行
#COMMAND:同样可以通过#制定一次跳转的数量

粘贴命令:

p:粘贴当前缓存区的内容, 如果缓存区中内容为整行内容,则内容粘贴在当前行的正下方, 否则粘贴至光标的后面
P:粘贴当前缓存区的内容, 如果缓存区中内容为整行内容,则内容粘贴在当前行的正上方, 否则粘贴至光标的后面

复制命令:

y:复制, 工作命令相似d命令
例如:yw复制一个单词
yy:复制整行
#COMMAND:同样可以通过#制定一次跳转的数量

改变命令:

c:修改,可以使 命令模式 --> 输入模式
cc:删除行并输入新内容
cw:删除后一个单词,并进入插入模式
ce,c^,c0...操作请自己尝试, 这里不做阐述

其他相关的编辑操作

v:按字符选定
V:按行选定
选定后结合编辑命令使用
u:撤销之前的编辑
Ctrl+r:撤销之前的撤销
.:重复前一个编辑操作

翻屏操作:

Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏

查找操作:

/PATTERN:在全文搜索指定模式匹配的字符, 从光标的位置至文件尾部的顺序
?PATTERN:在全文搜索指定模式匹配的字符, 从光标的位置至文件首部的顺序
n:与当前命令同方向, /PATTERN为往后翻
N:与当前命令反方向



VIM末行模式的操作:


(1) 地址定界

注释:以下命令不加:, 使用前须输入:进入末行模式
start,end
#:具体第#行, 例如2表示第2行
#,#:表示第#行到第#行, 例如2,10表示第2行到第10行
#,+#:表示左侧的#表示起始, 加上右边#表示的行数
.:表示当前行
$:表示最后一行
.,$-1:表示当前行到倒数第2行
%:表示全文, 相当于1,$
/pat1/,/pat2/:从第一个被匹配的pat1行开始,到第一个被匹配的pat2的行结束
使用方法:
后跟一个编辑命令
d:删除
y:复制
w /path/to/somewhere:将范围内的行另存到指定文件
r /path/to/somewhere:在指定位置插入指定文件的所有内容

(2) 查找和替换

地址定界s/要查找的内容/替换的内容/修饰符
  例如:替换全文的abc为123 %s/abc/123/gi
要查找的内容:可使用模式匹配
替换为的内容:不可使用模式, 但可以使用\1,\2等后向引用, 还可以使用&符号引用在前面找到的内容
修饰符:
i:忽略大小写
g:全局替换
查找替换的分隔符可替换为其他字符
例如::s/abc/123/g可替换成 :s@abc@123@g

练习:

1、复制/etc/grub2.cfg 至/tmp目录, 用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符
    %s/^[[:space:]]//
2、复制 /etc/rc.d/init.d/functions文件至/tmp目录, 用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
    %s/^[[:space:]]/#&/

多文件模式:

vim FILE1 FILE2 FILE3...
在末行模式下输入以下命令:
   firs:第一个
   netx:下一个
   prev:上一个
   last:最后一个
   wall 保存所有文件
   qall 退出所有

窗口分隔模式:

vim -o|-O FILE1 FILE2...
-o:水平分隔
-O:垂直分隔
在窗口间切换:Ctrl+w+上下左右
单文件窗口分隔:
Ctrl+w,s split 水平分隔
Ctrl+w,v vertical 垂直分隔

如图:为水平分隔

blob.png

如图:为垂直分隔


blob.png




定制vim的工作特性:


我们可以通过修改VIM的配置文件来达到定制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 简写 set noh

(5) 语法高亮
启用:syntax on
禁用:syntax off

(6) 忽略字符大小写
启用:set ic
禁用:set noic

(7) 获取帮助:
:help
:help subject


总结:

   VIM是一个入门难,精通难的文本编辑器,诸多指令需要牢牢的记在心中,熟练使用可以提高效率






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

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-03-04
下一篇 2016-03-04

相关推荐

  • 数据结构- 串的模式匹配算法:BF和 KMP算法

    Brute-Force算法的思想 1.BF(Brute-Force)算法   Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符,否则从串s 的第二个字符起再重新和串t进行比较。 2) 依此类推,直至串t 中的每个字符依次和串s的一个连续的字符序列相等,则称模式匹…

    Linux干货 2015-04-07
  • Google 开源技术protobuf

    1.  Protobuf简介        protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行…

    系统运维 2015-04-04
  • Centos 7&6分布式lamp平台

    Centos 7&6分布式lamp平台 Centos 7&6分布式lamp平台 一、环境介绍 lamp的实现方式 本文安装方式 二、Centos 7 分布式lamp平台,module方式 安装httpd和php xcache phpMyAdmin wordpress https的phpMyAdmin 环境规划 主机2配置mariadb 主机1…

    Linux干货 2016-04-25
  • 编译安装LAMP及分离式LAMP平台构建

    前言 LAMP网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网站服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,与微软的.NET架构相比,L…

    Linux干货 2015-04-20
  • Linux进程及作业管理总结

    一、简介     在使用Windows操作系统中很多时候需要查看某些程序进程的运行情况,一般来说我们可以打开Windows提供的"任务管理器",然后点击"进程"栏即可查看到当前系统运行的进程列表。例如偶尔出现系统内存、CPU占用过高的时候,我们往往都会查看进程列表,并找到当前占用内存或CPU过高的进…

    Linux干货 2015-10-05
  • 谷歌三大核心技术(三)Google BigTable中文版

    摘要 Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance。这些应用对Bigtable提出的要求差异非常大,无论是在数据量上(从URL到网页到卫星图像)还是在响应速度上…

    Linux干货 2015-04-13

评论列表(1条)

  • stanley
    stanley 2016-03-04 17:26

    不错,层次清晰,内容丰满。赞