vim文本编辑器

vi简介

vi:Visual Interface,是一种功能强大的文本编辑器,工作在字符模式下,它可执行输出、输出、查找、替换、块等众多文本操作,不需要图形界面,因此执行起来效率会非常高,主要用来编辑纯文本文件,常见的编码有,ASCII,Unicode等等

文本编辑器的种类:

    行编辑器:逐行来对文本进行处理的工具,如sed

    全屏编辑器:占据整个屏幕进行编辑,如nano,vi

vim工作模式

    输入模式:在文本文件当中输入内容

    命令模式:可执行一些编辑命令

    末行模式:vim内置的命令行接口,执行vim的内置命令

vim的使用

打开文件

     vim [OPTIONS] FILE…

     +#:打开文件光标处在第#行

     +:打开文件光标处在最后一行

     +/pattern:打开文件光标处在第一次被pattern所匹配到的行

     -b:二进制方式打开文件

     -d:比较两个文件的不同之处

     -m:制度方式打开文件

模式转换

     默认为命令模式

     命令模式 –> 输入模式

         -i:在当前光标处输入

         -a:在当前光标后方输入

         -o:在当前光标下方新建一行转为输入

         -I:在当前光标所在行的行首输入

         -A:在当前光标所在行的行尾输入

         -O:在当前光标上方新建一行转为输入

     锁定和解锁:

         ctrl+s:锁定

         ctrl+q:解锁

    

     输入模式 –> 命令模式

         

    

     编辑模式 –> 末行模式

         :

    

     末行模式 –> 编辑模式

         Esc、Esc

         注意:输入模式需要先转为命令模式然后再转为末行模式

    

关闭保存文件:

     命令模式

         ZZ:保存并退出

         ZQ:不保存退出

    

     末行模式:

         w:保存文本不退出

         q:不保存退出

         wq:保存并退出

         wq!:强制保存并退出

         x:保存并退出

         w /PATH/TO/SOMEFILE:将文件内容保存至指定文件中

         r /PATH/TO/SOMEFILE:将指定文件的内容读取至当前文件中

         ! COMMAND:可临时执行shell命令

         r! COMMAND:将命令的执行结果添加至当前光标下方

    

光标跳转:

     字符间跳转:

         h:左

         j:下

         k:上

         l:右

         #COMMAND:跳转#个字符

    

     单词间跳转:

         w:跳转至下个单词的词首

         e:跳转至下个单词的词尾

         b:跳转至上个单词的词首

         #COMMAND:跳转#个单词

    

     行尾行首跳转:

         ^:非空白字符行首

         0:绝对行首

         $:跳转至行尾

        

     当前页面跳转

         H:页首

         M:页中

         L:页尾

    

     行间跳转:

         #G:跳转至第#行

         G:跳转至尾行

         gg:跳转至首行

    

     句间跳转:以.为分隔

         ):跳转下一句

         (:跳转上一句

    

     段落跳转:以空行为分隔符

         }:跳转至下一段落

         {:上一段落

翻屏操作:

     Ctrl+d:向文件尾部翻半屏

     Ctrl+f:向文件尾部翻一屏

     Ctrl+u:向文件首部翻半屏

     Ctrl+b:向文件首部翻一屏

     Enter:逐行向后翻

命令模式操作:

     字符编辑:

         x:删除光标处的字符

         #x:删除光标以右的#个字符

         xp:当前光标所在处的字符与光标后的字符做交换

         ~:转换大小写

    

     替换命令:

         r:替换光标所在处的字符

         R:开启替换模式

    

     删除命令:

         d:删除,可结合光标跳转字符,实现范围删除

         d^:删除当前光标所在行以左的所有字符

         d$:删除当前光标所在行以右的所有字符

         dw:删除当前光标所在处下一个单词

         de:删除当前光标所在处的下一个单词

         db:删除当前光标所在处的上个单词

         dd:删除光标所在处的一整行

         #dd:删除光标所在行开始向下#行

         D:等于d$

    

     复制命令:

         y:复制,可结合光标跳转字符

         y$:复制光标所在行以右的所有字符

         y^:复制光标所在行以左的所有字符

         yw:复制光标所在处下个单词

         ye:复制光标所在处下个单词

         yb:复制光标所在处上个单词

         y0:复制光标所在行以左的所有字符,包含空白字符

         yy:复制当前光标所在行

         #yy:复制光标所在行向下#行

         Y:复制光标所在行

    

     粘贴命令:

         p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,粘贴至当前光标所在处的后方

         P:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,粘贴至当前光标所在处的前方

    

     改变命令:

         c:编辑模式 –> 输入命令,实现删除操作

         c$:删除光标所在处以右的所有字符并转为输入模式

         c^:删除光标所在处以左的所有字符并转为输入模式

         c0:删除光标所在处以左的所有字符并转为输入模式,包含空白字符

         cw:删除光标所在处下一个单词并转为输入模式

         ce:删除光标所在处下一个单词并转为输入模式

         cb:删除光标所在处上一个单词并转为输入模式

         cc:删除光标所在行并转为输入模式

         #cc:删除当前光标所在行向下#行并转为输入模式

         C:删除当前光标至行尾并转为输入模式

    

     一次性复制粘贴多次内容:

         100i zhai Esc:zhai可粘贴100次

    

可视化模式:

     v:按字符选定

     V:按行选定

     可结合编辑命令:d,c,p,y

     Ctrl+v:面向块

撤销操作:

     u:撤销前一次操作

     #u:撤销前#次操作

     U:撤销光标所在行所有此行的更改操作

     .:重复前一次操作

     n.:重复前n次操作

末行模式:

     地址定界

         :start_line,end_line

         #:指定的单个行

         #,#:从左侧的#行开始,到右侧之间的所有行

         #,+n:从左侧的#行开始向后加n行

         .:当前行

         $:最后一行

         $-1:表示倒数第二行

         %:表示全文,相当于1,$

         /pat1/,/pat2/:第一次被pat1所匹配到的行到第一次被pat2所匹配到的行结束,之间的所有内容

         #,/pat/:从指定的行开始到被第一次被pat匹配到的行结束,之间的所有内容

         /pat/,#:从第一次被pat匹配到的行开始到第#行结束,之间的所有内容

    

     后面可跟编辑命令:

         d:删除

         y:复制

         w /PATH/TO/FILE:将范围内的行保存至指定文件中

         r /PATH/TO/FILE:将指定文件的内容插入指定的所有行处

    

     查找:

         /PATTERN:从当前光标所在处向文件尾部查找

         ?PATTERN:从当前光标所在处向文件首部查找

         n:光标跳转至下一个被查找到的内容

         N:与n相反

vim寄存器:

     有26个命名寄存器和1个无命名寄存器,存放至不同剪切板中

     a,b,…,z用"寄存器表示,存放在数字和命令之间

     如:3"ayy表示复制3行达到a寄存器中

     "ap:表示将a寄存器中的内容粘贴

编辑二进制文件:

     vim -b BINFILE

     扩展命令模式下,利用xxd命令转换为可读的十六进制

     :%!xxd

     编辑二进制文件

     扩展命令模式下,利用xxd命令转换回二进制

     :%!xxd –r

    

    

多文件模式:

     vim FILE1 FILE2 FILE3 …

     :next 下一个文件

     :prev 上一个文件

     :last 最后一个文件

     :first 第一个文件

     :wall 保存所有

     :qall 不保存退出所有

     :wqall 保存所有并退出

使用多窗口:

     多文件分割

         vim -o|O FILE1 FILE2 FILE3 …

         -o:水平分割

         -O:垂直分割

         在窗口间切换:Ctrl+w,左右箭头

    

     单个文件:

         Ctrl+w,s:水平分割

         Ctrl+w,v:垂直分割

         Ctrl+w,q:取消相邻窗口

         Ctrl+w,o:取消全部窗口

         :qall 退出所有

    

定义vim工作特性:

     配置文件:永久有效

         全局:/etc/vimrc

         用户:~/.vimrc

    

     扩展模式:当前vim进程有效

         (1)行号

             显示行号:set number可简写为set nu

             取消行号:set nonumber可简写为set nonu

         (2)括号成对匹配

             匹配:set showmatch可简写为set sm

             取消匹配:set noshowmatch可简写为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

    

vim内置帮助

     :help

     vimtutor

练习及作业:

1.复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

 47 HOSTNAME=`/bin/hostname 2>/dev/null`
 48 HISTSIZE=1000
 49 if [ "$HISTCONTROL" = "ignorespace" ] ; then
 50 export HISTCONTROL=ignoreboth
 51 else
 52 export HISTCONTROL=ignoredups
 53 fi
 54 
 55 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
 56     
 57 # By default, we want umask to get set. This sets it for login shell
 58 # Current threshold for system reserved uid/gids is 200
 59 # You could check uidgid reservation validity in
 60 # /usr/share/doc/setup-*/uidgid file
 61 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 62 umask 002   
 63 else            
 64 umask 022   
 65 fi  
 66 
 67 for i in /etc/profile.d/*.sh ; do
 68 if [ -r "$i" ]; then
 69 if [ "${-#*i}" != "$-" ]; then
 70 . "$i" 
 71 else    
 72 . "$i" >/dev/null 2>&1
 73 fi      
 74 fi  
 75 done
 76     
 77 unset i
 78 unset -f pathmunge
:%s@^[[:space:]]\+@@

2.复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号

949 #       [ -z "$key" ] && plymouth --hide-splash
950 #       /sbin/cryptsetup $params ${key:+-d $key} create "$dst" "$src" <&1 2>/dev/null && success || failure
951 #       rc=$?
952 #       [ -z "$key" ] && plymouth --show-splash
953 #   fi
954 #   if [ $rc -ne 0 ]; then
955 #       ret=1
956 #       continue
957 #   fi
958 #   if [ -b "/dev/mapper/$dst" ]; then
959 #       if [ "$makeswap" = "yes" ]; then
960 #       mkswap "/dev/mapper/$dst" 2>/dev/null >/dev/null
961 #       fi
962 #       if [ "$mke2fs" = "yes" ]; then
963 #       if mke2fs "/dev/mapper/$dst" 2>/dev/null >/dev/null \
964 #           && mdir=$(mktemp -d /tmp/mountXXXXXX); then
965 #           mount "/dev/mapper/$dst" "$mdir" && chmod 1777 "$mdir"
966 #           umount "$mdir"
967 #           rmdir "$mdir"
968 #       fi
969 #       fi
970 #   fi
971 #    done < /etc/crypttab
972 #    return $ret
973 }
974 
975 # A sed expression to filter out the files that is_ignored_file recognizes
976 __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
977 
978 #if we have privileges lets log to kmsg, otherwise to stderr
979 if strstr "$(cat /proc/cmdline)" "rc.debug"; then
980 #        [ -w /dev/kmsg ] && exec 30>/dev/kmsg && BASH_XTRACEFD=30
981 #        set -x
982 fi
:%s@^[[:space:]]\+@#&@

作业题:

1.如何设置tab缩进为4个字符?

在末行模式输入set ts=4即可

2.复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log

vim文本编辑器6N]0@[@L~XL6M`KFDR5RG9Q.png

3.删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号

GEB14GWY$6W71]{_0%_6C$1.png

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

(0)
zhai796898zhai796898
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • 安装MariaDB

    1、安装MariaDB 安装命令 yum -y install mariadb mariadb-server安装完成MariaDB,首先启动MariaDB systemctl start mariadb设置开机启动 systemctl enable mariadb接下来进行MariaDB的相关简单配置 mysql_secure_installation首先是…

    Linux干货 2017-08-08
  • N21-兔锅-第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。     cp -a /etc/skel /home/tuser1     chmod g-x /home/tuser1/     chmod o-x /home/t…

    Linux干货 2016-07-26
  • 基于NFS服务的wordpress站点

    实验要求:             (1) nfs server导出/data/web,在目录中提供wordpress;     (2) nfs client挂载nfs server导出的文件系统至/data/web; …

    2017-06-11
  • shell通配符与正则表达式

        通配符是系统level的 而正则表达式需要相关工具的支持: egrep, awk, vi, perl。在文本过滤工具里,都是用正则表达式,比如像awk,sed等,是针对文件的内容的。通配符多用在文件名上,比如查找find,ls,cp,等等。 1.通配符       (1)…

    Linux干货 2016-02-28
  • LVM逻辑卷&RAID管理&磁盘配置详解

    LVM逻辑卷管理 应用场景:想象一下,你通过传统的硬盘分区方式为某些用户提供了一块磁盘,随着用户数据的不断增加,分区的容量告急。这时要增加容量,只能选择用另一块容量更大的硬盘或分区来替换,在这个过程中,你需要将数据先拷贝至新设备,拷贝完成之后,再用新设备替换容量告罄的设备。假设你很有耐心并且整个数据的拷贝过程是顺顺利利的,你也需要考虑靠背后文件的权限变化、替…

    Linux干货 2016-09-02
  • 从Linux小白到大牛——与狼共舞的日子8

    马哥教育网络班21期+第8周课程练习 1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥是第2层的设备,它设计用来创建两个或多个LAN分段。其中,每一个分段都是一个独立的冲突域。网桥设计用来产生更大可用宽带。它的目的是过滤LAN的通信流,使得本地的通信流保留在本地,而让那些定向到LAN其他部分(分段)的通信流转发到那里去。每…

    Linux干货 2016-11-14