文章目录
这里是一段防爬虫文本,请读者忽略。
本文原创首发于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的三种模式
- 编辑模式(命令模式)
- 输入模式
- 末行模式(底行模式)
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的模式转换
- 编辑模式到输入模式
- i:insert,在光标所在处前面输入
- a:append,在光标所在处后面输入
- o:open,在当前光标所在行的下方打开一个新行
- I:在当前光标所在行的行首输入
- A:在当前光标所在行的行尾输入
- O:在当前光标所在行的上方打开一个新行输入
- c:
- C:
- 输入模式到编辑模式
- 敲击 ESC键
- 编辑模式到末行模式
- 键入 :
- 末行模式到编辑模式
- 当末行模式只有一个 : 时,直接键入ESC键
- 当末行模式除了 : 之外,还输入了内容,比如这样
:/s/g
,这时键入两次ESC键即可
-关闭文件
-
:q 退出
-
:q! 强制退出,丢弃做出的修改
-
:wq 保存退出
-
:x 保存退出
-
:w /PATH/SOMEWHERE
-
命令模式下键入ZZ —— 保存退出
- 光标跳转
- 字符间跳转:h,j,k,l
- h:左
- l: 右
- j: 下
- k:上
- #COMMAND:跳转由#指定个数的字符
#例如
4 h #向左移动四个光标
5 j #向下移动5个光标
6 k #向上移动6行
7 l #向右移动7个光标
- 单词间跳转
- w 光标跳转至后一个单词的词首
- e 光标跳转至当前单词或者下一个单词的词尾
- 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中的末行模式
- 内建的命令行接口
- 地址定界
- 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的内容
- 查找
- /PATTERN:从当前光标所在处向文件尾部查找
- ?PATTERN:从当前光标所在处向文件首部查找
- n:与查找命令方向相同
- N:与查找命令方向相反
- 查找并且替换
- 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进程有效
- 行号
-
显示:set number,简写为set nu
-
取消显示:set nonu
- 括号匹配
- 匹配:set showmatch,简写为set sm
- 取消:set nosm
- 自动缩进
- 启用:set ai 全称为:auto intent
- 禁用:set noai
- 高亮搜索
- 启用:set hlsearch
- 禁用:set nohlsearch
- 语法高亮
- 启用:syntax on
- 禁用:syntax off
- 忽略字符大小写
-
启用:set ic
-
禁用(不忽略):set noic
获取帮助
- :help
- 练习题
- 复制/etc/grub2.cfg至/tmp/目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符
#其中一种做法
:%s/^[[:space:]]\+//g
- 复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号;
#做法
:%s/^[[:space:]]\+/#&/g
- 设置tab缩进为4个字符
:set tabstop=4
- 复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
:%s@/etc/sysconfig/init@/var/log@g #前面说过可以使用@作为分隔符,当使用@作为分隔符/就不需要转义了
- 删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
:%s@^#\([[:space:]]\+\)@\1@g
- 写在最后的话:
- 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
- 欢迎关注我的CSDN博客,IDYS’BLOG
- 持续更新内容:运维 | 网工 | 软件技巧
- 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
- 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!