VIM使用不熟练?看完这篇文章,让你使用VIM效率提高至少一倍! ——《Linux之vim知识详解》


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/105711166



- 写在开头的话

  • 请记住:实践是掌握知识的最快方法
  • 如果你只是怀着看看的态度去快速浏览文章,而不去认认真真的把文章里面讲的任何一个知识点去实践一遍,那么你永远也掌握不了它
  • 生命不息,折腾不止!

- vim编辑器

- vim编辑器简介

  • vim编辑器的前身为vi编辑器
    • vim:vi IMproved
  • vi全称:Visual Interface

注明:vi编辑器只是一个文本编辑器

  • 文本常见的字符编码方案有:
    • ASCII,Unicode
  • Unicode编码的三种具体实现
    • UTF-8:占用一到四个字节
    • UTF-16:占用二到四个字节
    • UTF-32:占用四个字节
  • vim编辑器可以打开并且识别所有的文本文件

注明:不要企图用vim编辑器打开二进制文件

  • 文本编辑种类
    • 行编辑器:sed
    • 全屏编辑器:nano,vi

- vim的使用

- vim的三种模式

  1. 编辑模式(命令模式)
  2. 输入模式
  3. 末行模式(底行模式)

vim打开时的默认模式是编辑模式


- vim打开文件的方式

  • vim [OPTION]… FILE…
  • +# : 打开文件后,直接让光标处于第#行的行首
[xiao@dayuanshuai ~]$ vim +30 /etc/services #使用案例,使用后光标直接定位于该文件的第30行
  • +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
[xiao@dayuanshuai ~]$ vim +/tcp /etc/services  #使用案例
  • +: 打开文件后,让光标处于文件最后一行
[xiao@dayuanshuai ~]$ vim + /etc/services #打开/etc/service文件后,光标处于最后一行

- vim的模式转换

  1. 编辑模式到输入模式
  • i:insert,在光标所在处前面输入
  • a:append,在光标所在处后面输入
  • o:open,在当前光标所在行的下方打开一个新行
  • I:在当前光标所在行的行首输入
  • A:在当前光标所在行的行尾输入
  • O:在当前光标所在行的上方打开一个新行输入
  • c:
  • C:
  1. 输入模式到编辑模式
  • 敲击 ESC
  1. 编辑模式到末行模式
  • 键入 :
  1. 末行模式到编辑模式
  • 当末行模式只有一个 :  时,直接键入ESC
  • 当末行模式除了 :  之外,还输入了内容,比如这样:/s/g,这时键入两次ESC键即可

-关闭文件

  • :q 退出

  • :q! 强制退出,丢弃做出的修改

  • :wq 保存退出

  • :x 保存退出

  • :w /PATH/SOMEWHERE

  • 命令模式下键入ZZ —— 保存退出


- 光标跳转

- 字符间跳转:h,j,k,l

  1. h:左
  2. l: 右
  3. j: 下
  4. k:上
  • #COMMAND:跳转由#指定个数的字符
#例如
4 h #向左移动四个光标
5 j #向下移动5个光标
6 k #向上移动6行
7 l #向右移动7个光标

- 单词间跳转

  1. w  光标跳转至后一个单词的词首
  2. e 光标跳转至当前单词或者下一个单词的词尾
  3. b 光标跳转至当前单词或者前一个单词的词首
  • #COMMAND: 跳转由#指定个数的单词数
#举例
3 w		#向后跳转3个单词数,并且光标移到单词首部
4 b		#向前跳转4个单词数,并且光标移到单词首部
5 e		#向后跳转5个单词数,并且光标移到单词尾部

- 行首行尾跳转

  • ^: 跳转至行首的第一个非空白字符

  • 0: 跳转至行首

  • $: 跳转至行尾

- 行间移动

  • #G:跳转至由#指定的行

  • G:最后一行

  • 1G,gg:第一行

- 句间移动

  • ):跳转至下一句
  • (:跳转至上一句

- 段落间移动

  • }:跳转至下一段落
  • {:跳转至上一段落

-vim的编辑命令

字符编辑

  • x:删除光标处的字符
  • #x:删除光标处起始的#个字符
  • xp:交换光标所在处的字符及其后面字符的位置

删除命令

  • d:删除命令,可结合光标跳转字符,实现范围删除
    • d$
    • d^
    • d0
    • dw
    • de
    • db
    • #COMMAND
# 例子
3,d,e	#删除当前光标往后至三个单词词尾的部分
3,d,w	#删除当前光标往后三个单词词首的部分
4,d,b	#删除当前光标往前4个单词词首的部分
  • dd:删除光标所在行
    • #COMMAND
  • D:删除光标所在行的所有字符,但保留该行

粘贴命令

  • 粘贴命令(p,put,paste)
    • p:缓存区存的如果为整行,则粘贴到当前光标所在行的下方。否则,则粘贴至当前光标所在处的后面
    • P:缓存区存的如果为整行,则粘贴到当前光标所在行的上方。否则,则粘贴至当前光标所在处的前面

复制命令(y,yank)

  • y:复制,工作行为相似于d命令
    • y$
    • y0
    • y^
    • ye
    • yw
    • yb
    • #COMMAND
  • yy:复制整行
    • #yy:复制多行

改变命令(c,change)

  • c:修改(类似于d命令,不过比d命令多了一个操作)
    • 执行 c 命令时,会从编辑模式转为输入模式
    • cc:删除整行,然后转为输入模式
    • c$
    • c^
    • c0
    • ce
    • cw
    • cb
    • #COMMAND

替换命令(r,replace)

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

- 其他编辑操作

- 可视化命令

  • v:按字符选定

  • V:按行选定

他们经常结合编辑命令使用

d,c,y

- 撤销此前的编辑

  • u(undo):撤销此前的操作

  • #u:撤销指定的次数

- 撤销此前的撤销

  • Ctrl+r

- 重复前一个编辑操作

  • .

- 翻屏操作

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

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

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

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


- vim自带的练习教程(有中文版)

  • vimtutor 输入该命令,即可进入教程

- vim中的末行模式

  • 内建的命令行接口
  1. 地址定界
  • start_pos,end_pos
    • #:具体第#行,例如2表示第2行
    • #,#:从左侧#表示行起始,到右侧#表示行结尾
    • #,+#:从左侧#表示的行起始,加上右侧#表示的行数。如:1,+3
    • $:最后一行
      • .,$-1:当前行开始到最后一行的上一行
    • %:全文,相当于1,$
    • /pat1/,/pat2/:
      • 从第一次被pat1模式匹配到的行开始,一直到第一次被part2匹配到的行结束
      • /pat/,$
    • 使用方式:后跟一个编辑命令
      • d
      • y
      • w /PATH/SOMEWHERE:将范围内的行另存至指定文件中
      • r /PATH/FROM/SOMEFILE:在指定位置插入指定文件的所有内容
:1,3w ./vim.txt  #将该文本的一到三行保存到当前目录下的vim.txt文件中
:100r /etc/issue  #在100行上插入/etc/issue的内容
  1. 查找
  • /PATTERN:从当前光标所在处向文件尾部查找
  • ?PATTERN:从当前光标所在处向文件首部查找
    • n:与查找命令方向相同
    • N:与查找命令方向相反
  1. 查找并且替换
  • s:在末行模式下完成查找替换操作
    • s/要查找的内容/替换的内容/修饰符
    • 要查找的内容:可使用模式
    • 替换的内容:不能使用模式,但可以使用/1,/2,/3…等后向引用符号,还可以使用“&”引用前面查找时查找到的整个内容
    • 修饰符:
      • i:忽略大小写
      • g:全局替换;默认情况下,每一行只替换第一次出现
# 举例
:.,$s/r\(..\)t/R\1T/g		#.代表单个字符,\1后向引用
:%s/1...x/&er/g		#&引用前面查找时查找到的内容
:1,10s/how/HOW/g  #在第一行到第十行将查找到的how替换为HOW
:%s\/etc\/fstab/\/var\/log/g
  • 查找替换中的分隔符/可以替换为其它字符,例如:
    • s@@@
    • s###
:%s@/var/log@/etc/fstab@g  #全局将/var/log替换为/etc/fatab

- 多文件模式

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

- 窗口分隔模式

  • vim -o|-O FILE1 FILE2 …
    • -o:水平分隔
    • -O:垂直分隔
    • 在窗口间切换:Ctrl+w,Arrow

- 单文件窗口分割

  • Ctrl+w,s:split,水平分割
  • Ctrl+w,v:vertical,垂直分割

- 定制vim的工作特性

  • 配置文件:永久有效

    • 全局:/etc/vimrc
    • 个人:~/.vimrc
  • 末行:当前vim进程有效

  1. 行号
  • 显示:set number,简写为set nu

  • 取消显示:set nonu

  1. 括号匹配
  • 匹配:set showmatch,简写为set sm
  • 取消:set nosm
  1. 自动缩进
  • 启用:set ai 全称为:auto intent
  • 禁用:set noai
  1. 高亮搜索
  • 启用:set hlsearch
  • 禁用:set nohlsearch
  1. 语法高亮
  • 启用:syntax on
  • 禁用:syntax off
  1. 忽略字符大小写
  • 启用:set ic

  • 禁用(不忽略):set noic

获取帮助

  • :help



- 练习题

  1. 复制/etc/grub2.cfg至/tmp/目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符
#其中一种做法
:%s/^[[:space:]]\+//g
  1. 复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号;
#做法
:%s/^[[:space:]]\+/#&/g
  1. 设置tab缩进为4个字符
:set tabstop=4
  1. 复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
:%s@/etc/sysconfig/init@/var/log@g  #前面说过可以使用@作为分隔符,当使用@作为分隔符/就不需要转义了
  1. 删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
:%s@^#\([[:space:]]\+\)@\1@g



- 写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容运维 | 网工 | 软件技巧
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!


在这里插入图片描述

发布了5 篇原创文章 · 获赞 1 · 访问量 331

猜你喜欢

转载自blog.csdn.net/weixin_41633902/article/details/105711166