当前位置: 首页 > news >正文

二、Linux入门之VIM编辑器

vim文本编辑工具

常用功能
模式切换、环境设置、光标移动、剪切/删除复制粘贴、撤消重做、搜索替换、文件分屏编辑、保存退出及其他常用操作模式切换

vim常用模式有:

	1、命令模式(Command mode),vim一启动便进入命令模式;
	2、输入模式(Insert mode),在命令模式下输入以下字母进入输入模式,并在光标跳转的位置开始输入,按Esc回到命令模式
		i:光标位置不变
        I:光标跳到行首
        a:光标跳到下一个字符
        A:光标跳到行尾
        o:在光标当前行下方插入一个空行
        O:在光标当前行的上方插入一个空行
	3、底线命令模式(Last line mode),在命令模式下输入 : 进入底线命令模式,按Enter回到命令模式
 	4、取代模式(Replace mode),在命令模式下输入r(只取代光标所在位置,只执行一次,结束后返回命令模式),或输入R(持续取代光标所在位置,直到按Esc回到命令模式)进入取代模式

环境设置,工作在底线命令模式:

	设置tab键间隔
		设置tab键间隔为4个字符			set tabstop=4 		
	行号显示 
	 	显示:			set number,简写 set nu 
		取消显示:		set nonumber, 简写 set nonu
	忽略字符的大小写 
		启用:			set ignorecase,简写 set ic 
		不忽略:			set noic
	自动缩进
		启用:			set autoindent,简写 set ai
		禁用:			set noai
	复制保留格式 
		启用:			set paste
		禁用:			set nopaste
	显示Tab和换行符 ^I 和$显示
		启用:			set list
		禁用:			set nolist
	高亮搜索
		启用:			set hlsearch
		禁用:			set nohlsearch
	语法高亮
		启用:			syntax on
		禁用:			syntax off
	文件格式
	 	启用windows格式:			set  fileformat=dos
	 	启用unix格式:			set fileformat=unix 简写 set ff=dos|unix 
	设置文本宽度 
	 	set textwidth=65 (vim only) 
	 	set wrapmargin=15
	设置光标所在行的标识线
	 	启用:		set cursorline,简写 set cul
	 	禁用:		set nocursorline
	配置文件:永久有效 
		全局:/etc/vimrc
		个人:~/.vimrc
		配置.vimrc文件,实现在创建新脚本文件时自动生成基本格式
		vim .vimrc
			autocmd BufNewFile *.sh exec “:call SetTitle()”
			func SetTitle()
				if expand(“%:e”) == ‘sh’
					call setline(1,”#!/bin/bash”)
					call setline(2,”#********************************”) 
					call setline(3,”#Author: 			Test”)
					call setline(4,”#Link:			12345678901”)
					call setline(5,”#Date:			”,.strftime(“%Y-%m-%d %H:%M:%S”))
					call setline(6,”#File Name:		”.expand(“%”))
					call setline(7,”#Description:		Script title”)
					call setline(8,”#********************************”)
					call setline(9,””)
			endif
		endfunc
		autocmd BufNewFile * normal G

光标移动,工作在命令模式,移动方式有:

	1、行/列间移动:
		0:跳到行首			$:跳到行尾			+:下移			-:上移
		h:左移				j:下移				k:上移 			l:右移)
		空格键:右移,行结束后自动跳到下一行行首  			        回车键:下移
		以上命令除0、$、+、-外,其他命令使用“数字n+命令”可使光标直接移动n个位置,移动方向由命令决定
		w:下一单词词首			e:当前或下一单词词尾				b:当前或前一单词词首
	2、页间移动:
		G:文件尾			gg:文件头		nG:移动到第n行,1G相当于gg
		Ctrl+f:向下移动一页					Ctrl+b:向上移动一页
		Ctrl+d:向下移动半页					Ctrl+u:向上移动半页
		H:移动到当前页的首行					M:移动到当前页的中间行
		L:移动到当前面的尾行

剪切/删除复制粘贴,工作在命令模式:

	1、剪切/删除,剪切与删除共用命令:
		x:向后删除,del键					X:向前删除,Backspace
		nx:连续删除n个字符					d0:删除从当前位置到行首的字符
		d$:删除从当前位置到行尾的字符			dd:删除整行
		ndd:删除从当前行起往下n行				d1G:删除文件第一行到当前所在行
		dG:删除当前所在行到文件最后一行
	2、复制:
		y0:复制从当前位置到行首的字符			yd$:复制从当前位置到行尾的字符
		yy:复制光标当前一行					nyy:复制当前行起往下n行
		y1G:复制当前行到文件第一行				yG:复制当前行到文件最后一行
	3、粘贴:
		p:粘贴在光标位置后面) 				P:粘贴在光标位置前面

撤消重做,工作在命令模式:

	1、撤消:u,撤消前一个操作
	2、重做:Ctrl+r,重做上一个动作

搜索替换,工作在底线命令模式:

	1、搜索:
		/:向下搜索
		?:向上搜索,进入搜索模式时使用字符n搜索下一下,N与n搜索方向相反,搜索要区分大小写
	2、替换:
		n1,n2s/word1/word2/g:在第n1与n2行之间查找word1这个字符串,并将该替换为word2
		1,$s/word1/word2/g 或 :%s/word1/word2/g:从第1行到最后1行查找word1 字符串,并替换为word2
		1,$s/word1/word2/gc 或 :%s/word1/word2/gc:从第1行到最后1行查找 word1字符串,并替换为word2,且在取代前显示提示字符给用户确认(confirm)是否需要取代

文件分屏编辑,工作在命令模式:在窗口间切换:Ctrl+w, Arrow;:wqall 退出

	1、单文件:
		Ctrl+w,s: split, 水平分割				Ctrl+w,v: vertical, 垂直分割
		Ctrl+w,q:取消相邻窗口					Ctrl+w,o: 取消全部窗口
	2、多文件:vim -o/-O FILE1 FILE2 ...
		-o: 水平分割			-O: 垂直分割
	3、打开多文件 vim FILE1 FILE2 FILE3 ...
		:next 下一个			:prev 前一个
		:first 第一个		:last 最后一个
		:wall 保存所有		:qall 退出所有
		:wqall

保存退出,工作在底线命令模式

	w(保存)							q(退出)
	ZZ(保存退出,命令模式)				ZQ(不保存退出,命令模式)

其他常用操作,工作在底线命令模式:

	1、!command 执行命令
	2、r!command 读入命令的输出
	3、r filename 读文件内容到当前文件中
	4、w filename 将当前文件内容写入另一个文件

关于VIM的小练习

	1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
		答:在底线命令模式(Last line mode)下执行:1,$s/^ \+//
	2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
		答:在底线命令模式(Last line mode)下执行:1,$s/^\( \+\)/#\1/
	3、在vim中设置tab缩进为4个字符
		答:在底线命令模式(Last line mode)下执行:set tabstop=4
	4、复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
		答:在底线命令模式(Last line mode)下执行:1,$s/\/etc\/sysconfig\/init/\/var\/log/
	5、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
		答:在底线命令模式(Last line mode)下执行:1,$s/^#\( \+\)/\1/

相关文章:

  • 四、Linux入门之文件查看命令
  • 4、Linux入门之文本处理小练习
  • 五、Linux入门之文件查找与打包解压缩
  • Linux入门之文本处理三剑客grep、sed、akw
  • 5、Linux入门之小练习
  • Linux入门之正则表达式
  • 七、Linux入门之软件包管理
  • 七、Linux入门之磁盘存储和文件系统
  • 7、Linux入门之小练习
  • 十、Linux入门之Shell进阶
  • tekla钢结构算量_【BIM应用案例】钢结构第一楼:天津117大厦!
  • matlab 加入高频噪声_电路中共模噪声的产生和抑制机理
  • 类图中表达总体与局部的关系_游戏中的亲密关系表达
  • ppt流程图字体太小_PPT字体使用攻略,看这一篇文章就够了!
  • mediarecorder添加时间戳_LeetCode312.戳气球
  • [笔记] php常见简单功能及函数
  • android图片蒙层
  • angular组件开发
  • Hibernate【inverse和cascade属性】知识要点
  • Unix命令
  • vue.js框架原理浅析
  • VuePress 静态网站生成
  • 阿里云Kubernetes容器服务上体验Knative
  • 服务器之间,相同帐号,实现免密钥登录
  • 技术胖1-4季视频复习— (看视频笔记)
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • AI算硅基生命吗,为什么?
  • Nginx实现动静分离
  • 带你开发类似Pokemon Go的AR游戏
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #Spring-boot高级
  • #vue3 实现前端下载excel文件模板功能
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (七)c52学习之旅-中断
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .gitattributes 文件
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • :如何用SQL脚本保存存储过程返回的结果集
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [2544]最短路 (两种算法)(HDU)
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [Angular] 笔记 6:ngStyle
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!
  • [HNOI2006]鬼谷子的钱袋
  • [iOS]把16进制(#871f78)颜色转换UIColor
  • [kubernetes]控制平面ETCD
  • [python]python监听、操作键盘鼠标库pynput详细教程
  • [SV]SystemVerilog中指定打印格式