linux文本编辑利器-vim

概述

Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。Vim强大的编辑能力中很大部分是来自于其普通模式命令。vim的设计理念是命令的组合。例如普通模式命令"dd"删除当前行,"dj"代表删除到下一行,原理是第一个"d"含义是删除,"j"键代表移动到下一行,组合后"dj"删除当前行和下一行。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。

一.vim安装

在新版的linux中,大部分都内置了vim编辑器。而一些比较老的版本中依然是vi,亦或者是使用过程中,失手把vim卸载了。遇到这些情况,如果想要使用功能强大的vim,就需要我们重新对其进行安装。
如果你的系统已经连接外网,且yum源没做修改,只需要执行一下命令进行安装
yum install -y vim
如果没有网络的情况下,就需要到用rpm包的方式自行安装。如下面是我在CentOS7上把vim卸载后,手动安装的过程
~]# yum remove -y vim #卸载vim
  tmp]# which vim #在另一台vim正常的CentOS7上查看vim命令位置
    /usr/bin/vim
tmp]# rpm -qf /usr/bin/vim  #查看vim是由哪个安装包安装而来
    vim-enhanced-7.4.160-1.el7.x86_64
Packages]# rpm -ivh vim-enhanced-7.4.160-1.el7.x86_64.rpmwarning: vim-enhanced-7.4.160-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
        package vim-enhanced-2:7.4.160-1.el7.x86_64 is already installed
[root@centos7 Packages]##以上是我由本地rpm包中安装,实际中可能需要从其它相同版本中拷贝,然后安装。由于其没有依赖包,rpm包的方式还是蛮方便的哈。。

二.vim的简单使用

1.打开文件
vim [OPTION]... FILE...
    +#:打开文件后直接将光标处于第#行
    +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
    vim + file 直接打开file,光标在最后一行
    vim -b file 二进制方式打开文件
    vim -d file1 file2... 比较多个文件
        示例:~]# vim -d headscp.txt second.sh third.sh #此时会垂直分三屏分别显示三个文件并高亮显示差异

image

linux文本编辑利器-vim

vim -m file 只读打开文件ex file 或 vim -e 直接进入ex模式vim 后面跟文件名,如果该文件存在,文件被打开并显示内容
如果该文件不存在,当编辑后第一次存盘时创建它
2.vim的模式
在vim编辑文本时,击键行为是依赖于vim的“模式”vim有三种主要模式:
    命令模式(默认):移动光标,剪切/粘贴文本
    插入(编辑)模式:修改文本
    扩展命令模式:保存,退出等
对于上面的三种模式中的操作,稍后会进行详细说明
ESC键 退出当前模式
ESC键 ESC键 总是返回到命令模式
3.模式间的转换:
命令模式-->插入模式
        i:insert,在光标所在处输入        I:在当前光标所在行的行首输入
        a:append,在光标所在处后面输入
        A:在光标所在行的行尾输入
        o:在当前光标所在行的下方打开一个新行
        O:在当前光标所在行的上方打开一个新行
插入模式-->命令模式
    ESC键
命令模式-->扩展模式
    :
扩展模式-->命令模式
    ESC
锁定和解锁:
    CTRL+s 锁定
    Ctrl+q 解锁
4.关闭文件
扩展模式:    :q 退出    :q! 强制退出,丢弃做出的修改    :wq 保存退出    :x  保存退出
命令模式:    ZZ:保存退出    ZQ:不保存直接退出

三. vim进阶

1.扩展模式
按“:”进入Ex模式
创建一个命令提示符:处于底部的屏幕左侧
命令:
    w写(存)磁盘文件
    wq写入并退出
    x写入并退出
    q退出
    q!不存盘退出,即使更改都将丢失
    r filename 读文件内容到当前文件中
    w filename 将当前文件内容写入另一个文件
    !command 暂停对文本的操作,进行命令的操作,此过程不会改变文件内容,是一种不必中断编辑直接进行命令操作的好方式
    r!command 把一个命令的执行结果读入到当前处理的文件中
2. 命令模式
光标跳转
字符间跳转:    h:左 l:右 j:下  k:上
    #COMMAND:跳转由#指定的个数的字符
单词间跳转:
    w:下一个单词的词首    e:当前或下一个单词的词尾
    b:当前或前一个单词的词尾
    #COMMAND:由#指定一次跳转的单词数
当前页跳转:    H:页首 M:页中间行 L:页底
行首行尾跳转:
    ^:跳转至行首的第一个非空字符
    0:跳转至行首
    $:跳转至行尾
行间移动:
    #G:#跳转至由#指定的行    G:最后一行
    1G,gg:第一行
句间移动:
    ):下一句  (:上一句
段落间移动:
    }:下一段  {:上一段
命令模式翻屏操作
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
字符编辑
x:删除光标处的字符#x:删除光标处起始的#个字符xp:交换光标所在处的字符及其后面的字符位置
~:转换大小写
替换命令(r,replace)
r:替换光标所在处的字符R:切换成REPLACE模式,在此模式下对字符替换实现多字符替换
删除命令
d:删除命令,可结合光标跳转字符,实现范围删除d$:删除到行尾d^:删除到非空行首
d0:删除到行首(绝对行首)
dw:向后删除一个单词de:删除至本单词词尾或下个单词词尾db向前删除单词d ( 删一句;d {删一段d G删到行尾;d gg 删到行首
#COMMAND:上面一些也可以结合数字实现多行多个单词的删除
dd:删除光标所在的行
    #dd:多行删除D:从当前光标位置一直删除到行尾,留空格,等同于d$
复制命令
y:复制,行为相似于d命令y$:复制至行尾
y0:复制至行首y^:复制至第一个非空字符
ye:复制至当前词尾或下个词尾
yw:复制一个单词
yb:向前复制一个单词#COMMANDyy:复制行    #yy:复制多行y:复制整行
粘贴命令
P:缓冲区存的如果是整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面P:缓冲区存在的如果是整行,则粘贴当前光标所在的行的上方;否则,则粘贴至当前光标所在处的前面
改变命令
c:修改后切换成插入模式
命令模式-->插入模式
    c$:删除至行尾
    c^:删除至行首第一个非空字符    c0:删除至行首    cb:向前删除一个单词
    ce:向后删除至单词尾部或下一个单词尾部
    cw:删除至下一单词行首    #COMMAND:同时删除多个
    cc:删除当前行并输入新内容        #cc:删除多行
    C:删除当前光标到行尾,并切换成插入模式

四. vim提高

1.命令模式:
100iwang [ESC] 粘贴“wang” 100次

GIF.gif

image<start position> <command><end position>

COMMAND:
    y 复制、d 删除、gU 变大写、gu变小写
例如 0y$ 命令意味着:    0--> 先到行头
    y--> 从这里开始拷贝    $-->拷贝到本行最后一个字符
        ye:从当前位置拷贝到本单词的最后一个字符
2.扩展模式
地址定界
:start_pos,end_pos#:具体第#行,例如2表示第二行#,#:从左侧#表示行起始,到右侧#表示行结尾#,+#:从左侧#表示的行起始,加上右侧#表示的行数:2,+3 表示2到5行.:当前行
$:最后一行
    .,$-1:当前行到倒数第二行
%:全文,相当于1,$
/pat1/,/pat2/
    从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束    #,/pat/:从#行开始到匹配的行结束
    /pat/,$:从匹配到的行到文件结尾
使用方式:后面跟一个编辑命令
    d:删除
    y:复制
    w file:将范围内的行另存至指定文件中
    r file :在指定位置插入指定文件中的所有内容
查找
/PATTERN:从当前光标所在处向文件尾部查找
?/PATTERN:从当前光标所在处向文件尾部查找n:与命令同方向N:与命令反方向
查找并替换
s:在扩展模式下完成查找替换操作
    格式:s/要查找的内容/替换为的内容/修饰符
    要查找的内容:可以使用模式
    替换为的内容:不能使用模式,但可以使用\1,\2,...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
    修饰符:        i:忽略大小写        g:全局替换;默认情况下,每一行只替换第一次出现        gc:全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,例如
    s@/etc@/var@g
    s#/boot#/#i
撤销更改
u撤销最近的更改
#u撤销之前的多次更改U撤销光标落在这行后所有此行的更改
按Ctrl - r重做最后的“撤销”更改
.重复前一个操作n.重复前一个操作n次
vim寄存器
vim中有26个命名寄存器和1个无命名寄存器,长存放不同的剪切板内容,可以不同会话间共享。
用a,b,...,z表示,放在数字和命令之间:
    如:3"tyy表示复制2行到t寄存器中    "tp表示将t寄存器内容粘贴未指定,将使用无命名寄存器
有10个数字寄存器0,1,2...,9表示,0存放最近复制内容,1存放最近删除内容。当新的文本变更和删除时,1转存到2,2转存到3,依此类推。数字寄存器不能在不同会话间共享。
编辑二进制文件:
以二进制方式打开文件
    vim -b binaryfile扩展命令模式下,利用xxd命令转换为可读的十六进制
    :%!xxd
编辑二进制文件
扩展命令模式下,利用xxd命令转换回二进制
    :%!xxd -r
保存退出
可视化模式
允许选择文本块
    v面向字符
    V面向行
    ctrl-v 面向块
可视化键可用于移动键组合使用
    w,),},箭头等
突出显示的蚊子可以被删除,复制,变更,过滤,搜索/替换等
多文件模式
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:取消全部窗口
    :wqall 退出
定制vim的工作特性
配置文件:永久生效
    全局:/etc/vimrc
    个人:~/.vimrc
扩展模式:当前vim进程有效
(1)行号:
    显示:set number ,简写为set nu
    取消显示:set nonumber,简写为set nonu
(2)括号成对匹配
    匹配:set showmatch,简写set sm
    取消:set nosm
(3)设置tab默认缩进为4个字符    set smartindent    set tabstop=4
    set shiftwidth=4
    set expandtab    set softtabstop=4(4)自动缩进
    启用:set ai
    禁用:set noai
(5)高亮搜索
    启用:set hlsearch
    禁用:set nohlsearch
(6)语法高亮
    启用:syntax on
    禁用:syntax off(7)忽略字符的大小写
    启用:set ic
    禁用:set noic
(8)文件格式
    启用:fileformat=unix
    不忽略:fileformat=dos
(9)设置文本宽度:
    :set textwidth=65(vim only)
:set wrapmargin=15获取set相关帮助
:help option-list:set or :set all
vi/vim内置帮助及自定补全
vi/vim内置帮助
    :help
    :help topic 
    Use:q to exit helpvimtutor是vim自带的帮助及练习手册,可以经常使用提高编辑速度
补全:vim使用过程中,已知补全方式为前面已经有过该单词出现,下次使用输入前面单词,然后按Ctrl+p可以列出可选项供我们选择,偶尔使用可以提高文本编辑速度。

总结

上文中仅仅对vim的部分功能做了总结,作为一款强大的编辑器,当然还有诸多功能来提高我们的文本编辑速度。为了尽快熟悉vim的使用,要善用vimtutor,多练习多使用。

原创文章,作者:提着酱油瓶打醋,如若转载,请注明出处:http://www.178linux.com/33608

(0)
提着酱油瓶打醋提着酱油瓶打醋
上一篇 2016-08-11
下一篇 2016-08-12

相关推荐

  • 第五周作业

    1、显示当前系统上root、fedora或user1用户的默认shell; 答:#egrp ‘^(root|fedora|user1)’ /etc/passwd | cut -f1,7 -d: 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); 答:#egrp -o &…

    Linux干货 2017-02-25
  • Nginx 编译安装

    简介 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配…

    Linux干货 2016-12-01
  • linux系统基础目录结构及功能说明

    linux系统基础目录结构及功能说明 [root@localhost /]# ls bin boot dev etc home host lib lib64 media mnt opt proc root run sbin srv sys tmp usr var /bin:所有用户可用的基本命令程序文件;/sbin:供系统管理使用的工具程序;/boot:引导…

    Linux干货 2018-03-04
  • 浅谈技术管理(转载,讲的非常不错,技术和产品都值得一看)

      针对这些年旁观和经历过的技术产品场景,做一些个人的总结和判定,尽量不涉及争议性话题,比如对一个互联网公司而言,技术重要还是产品重要之类的,这种话题一扯开,各有道理,谁也别指望说服谁。     此外,加一个前缀,主要针对非技术领导者所面临的技术管理困境,在很多从传统企业转型或个人站转型的互联网企业里,这个问…

    Linux干货 2015-04-04
  • ThridWeek_FirstDay

    python学习笔记整理

    Linux干货 2017-10-09
  • 第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 2、编辑/etc/group文件,添加组hadoop。 3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。 4、复制/etc/sk…

    Linux干货 2017-02-07