Linux(7):Vim 程序编辑器

vi

基本上 vi 共分为三种模式,分别是【一般指令模式】、【编辑模式】与【指令列命令模式】。
这三种模式的作用分别是:
一般指令模式(command mode)
以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模式中,可以使用【上下左右】按键来移动光标,可以使用【删除字符】或【删除整列】来处理文件内容,也可以使用【复制、贴上】来处理文件数据。
编辑模式(insert mode)
在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的。要等到按下『i , I , o, O, a,A,r,R』等任何一个字母之后才会进入编辑模式。
通常在Linux中,按下这些按键时,在画面的左下方会出现【INSERT 或REPLACE】的字样,此时才可以进行编辑。而如果要回到一般指令模式时,则必须要按下【Esc】这个按键即可退出编辑模式。
指令列命令模式(command-line mode)
在一般模式当中,输入『:/?』三个中的任何一个按钮,就可以将光标移动到最底下那一列。在这个模式当中,可以提供【搜寻资料】的动作,而读取、存盘、大量取代字符、离开 vi、显示行号等等的动作则是在此模式中达成的。

在这里插入图片描述
一般指令模式可与编辑模式及指令列模式切换,但编辑模式与指令列模式之间不可互相切换。

实例:
1.使用 vi filename 进入一般指令模式;
2.按下 i 进入编辑模式,即可编辑文字;
3.按下 Esc 按钮回到一般指令模式;
4.进入文件列模式,文件储存并离开 vi 环境。
使用:wq 存档(write)并离开(quit)。使用 ls -l 显示刚刚创立的文档:

在这里插入图片描述

按键说明

移动光标

第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等

按键说明
h 或 向左箭头光标左移一个字符
j 或 向下箭头光标下移一个字符
k 或 向上箭头光标上移一个字符
l 或 向右箭头光标右移一个字符

如果想要进行多次移动的话,例如向下移动30列,可以使用"30j"或"30↓”的组合按键,亦即加上想要进行的次数(数字)后,按下动作即可。

按键说明
[ctrl]+[f]屏幕向下移动一页,相当于 [Page Down]
[ctrl]+[b]屏幕向上移动一页,相当于 [Page Up]
[ctrl]+[d]屏幕向下移动半页
[ctrl]+[u]屏幕向上移动半页
+ / -光标移动到非空格字符的 下 /上 一列
n<space>n代表数字,按下数字后再按下空格键,光标会向右移动这个列的 n 个字符。
0 或 功能键 [Home]这是数字 0,移动到这一列的最前面字符处
$ 或 功能键 [End]移动到这一列的最后面字符处
H光标移动到这个屏幕的最上方的那一列的第一个字符
M光标移动到这个屏幕中央的那一列的第一个字符
L光标移动到这个屏幕的最下方的那一列的第一个字符
G光标移动到文件的最后一列
nG移动到这个文件的第 n 列
gg移动到这个文件的第一列,相当于 1G
n<Enter>n 为数字。光标向下移动 n 列

搜寻与取代

按键说明
/word向光标之下寻找一个名为 word 的字符串
?word向光标之上寻找一个名为 word 的字符串
nn 是英文按键,代表重复前一个搜寻动作
NN 是英文按键,代表反向前一个搜寻动作,前一个动作为 /word,则按下 N 后,表示动作?word
:n1,n2s/word1/word2/gn1 与 n2 为数字。在第 n1 与 n2 列之间寻找 word1这个字符串,并将其替代为 word2
:1,$s/word1/word2/g从第一列到最后一列寻找 word1这个字符串,并将其替代为 word2
:1,$s/word1/word2/gc从第一列到最后一列寻找 word1这个字符串,并将其替代为 word2,且取代前显示提示字符给用户确认是否需要取代

删除复制与黏贴

按键说明
x,X在一列字当中,x 为向后删除一个字符(相当于[del]按键),X 为向前删除一个字符(相当于[backspace]亦即是退格键)
nx连续向后删除 n 个字符
dd删除游标所在的那一列
ndd删除游标所在的向下 n 列
d1G删除光标所在到第一列的所有数据
dG删除光标所在到最后一列所有的数据
d$删除游标所在处到该列的最后一个字符
d0删除游标所在处,到该列最前面的一个字符
yy复制游标所在的那一列
nyy复制游标向下的 n 列
y1G复制游标所在的第一列的所有数据
yG 复制光标所在列到最后一列的所有数据
y0复制光标所在的那个字符到行首的所有数据
y$复制光标所在的那个字符到行尾的所有数据
p,Pp 为将已复制的数据在光标下一列粘上,P 则为粘在光标上一列。
J将光标所在列与下一列的数据合成同一列
c重复删除多个数据,10cj 代表向下删除 10 列
u复原前一个动作
[ctrl]+r重做上一个动作
.重复前一个动作

第二部份:一般指令模式切换到编辑模式的可用的按钮说明

进入插入或取代的编辑模式

按键说明
i, I进入插入模式(Insert mode ): i 为【从目前光标所在处插入】,Ⅰ为【在目前所在列的第一个非空格符处开始插入】
a, A进入插入模式(Insert mode ):a 为【从目前光标所在的下一个字符处开始插入】,A 为【从光标所在列的最后一个字符处开始插入】
o, O进入插入模式(Insert mode ):o 为【在目前光标所在的下一列处插入新的一列】;О 为在目前光标所在处的上一列插入新的一列
r, R进入取代模式(Replace mode ) :r 只会取代光标所在的那一个字符一次;R 会一直取代光标所在的文字,直到按下ESC为止
ESC退出编辑模式

第三部份:一般指令模式切换到指令列模式的可用按钮说明

指令列模式的储存、离开等指令

按键说明
:w将编辑的数据写入硬盘文件中
:w!若文件为只读,强制写入该文件
:q离开 vi
:q!不保存强制离开
:wq储存后来开,若为 !wq 则为强制储存后离开
ZZ若文件没有变动,则不储存离开,若文件更改过,储存后离开
:w [filename]将编辑的数据储存成另一个文件(类似另存新档)
:r [filename]在编辑的数据中,读入另一个文件的内容。即将 [filename] 中的内容加到光标后面
:n1,n2 w [filename]将 n1 到 n2 的内容储存成 filemname 这个文件
:! command暂时离开 vi 到指令模式下执行 command 的显示结果。

vim 环境变更

按键说明
:set nu显示 行号,设定之后,会在每一列的前缀显示该列的行号
:set nonu与 :set nonu 相反,取消行号

vim的暂存档、救援回复与开启时的警告讯息

当我们在使用vim 编辑时,vim 会在与被编辑的文件的目录下,再建立一个名为.filename.swp 的文件。

  1. 可能有其他人或程序同时在编辑这个文件:
    找到另外那个程序或人员,请他将该 vim 的工作结束,然后你再继续处理;
    如果只是要看该文件的内容并不会有任何修改编辑的行为,那么可以选择开启成为只读(O)文件。
  2. 在前一个 vim 的环境中,可能因为某些不知名原因导致vim中断(crashed):
    如果之前的 vim 处理动作尚未储存,此时你应该要按下[R],亦即使用®ecover 的项目,此时 vim 会载入.man_db.conf.swp 的内容,让你自己来决定要不要储存。这样就能够救回来你之前未储存的工作。不过那个.man_db.conf.swp 并不会在你结束vim后自动删除,所以你离开vim后还得要自行删除.man_db.conf.swp才能避免每次打开这个文件都会出现这样的警告;
    如果确定这个暂存盘是没有用的,那么可以直接按下 [D] 删除掉这个暂存盘,亦即(D)elete it这个项目即可。此时 vim 会载入man_db.conf ,并且将旧的.man_db.conf.swp删除后,建立这次会使用的新的.man_db.conf.swp。

在这里插入图片描述

[O]pen Read-Only: 打开此文件成为只读档,可以用在只是想要查阅该文件内容并不想要进行编辑行为时。
(E)dit anyway: 还是用正常的方式打开你要编辑的那个文件,并不会载入暂存盘的内容。不过很容易出现两个使用者互相改变对方的文件等问题!不好不好!
®ecover: 就是加载暂存盘的内容,用在你要救回之前未储存的工作。不过当你救回来并且储存离开vim后,还是要手动自行删除那个暂存档喔!
(D)elete it: 你确定那个暂存档是无用的!那么开启文件前会先将这个暂存盘删除!这个动作其实是比较常做的!因为你可能不确定这个暂存档是怎么来的,所以就删除掉他吧!哈哈!
(Q)uit: 按下q就离开 vim ,不会进行任何动作回到命令提示字符。
(A)bort: 忽略这个编辑行为,感觉上与quit非常类似!也会送你回到命令提示字符就是啰!

Vim 的额外功能

使用 vi 时其实就是在使用 vim

在这里插入图片描述

区块选择

按键说明
v字符选择,会将光标经过的地方反白选择
V列选择,会将光标经过的列反白选择
[Ctrl ]+v区块选择,可以用长方形的方式选择资料
y将反白的地方复制起来
d将反白的地方删除掉
p将刚刚复制的区块,在游标所在处贴上

多文件编辑

按键说明
:n编辑下一个文件
:N编辑上一个文件
:files列出目前这个 vim 的开启的所有文件

多窗口功能

按键说明
: sp [ filename]开启一个新窗口,如果有加 filename,表示在新窗口开启一个新文件,否则表示两个窗口为同一个文件内容(同步显示)
[ctrl ]+w+j, [ctrl ]+w+↓按键的按法是:先按下[ctrl]不放,再按下 w 后放开所有的按键,然后再按下 j (或向下箭头键),则光标可移动到下方的窗口
[ctrl ]+w+k, [ctrl]+W+↑同上,不过光标移动到上面的窗口。
[ctrl]+w+ q其实就是:q结束离开。如果我想要结束下方的窗口,那么利用[ctrl]+W+↓ 移动到下方窗口,按下 :q 离开,也可以按 [ctrl]+w+q

vim 的挑字补全功能

组合按钮补齐的内容
[ctrl]+x -> [ctrl]+n透过目前正在编辑的这个【文件的内容文字】作为关键词,予以补齐
[ctrl]+x ->[ctrl]+f以当前目录内的【文件名】作为关键词,予以补齐
[ctrl]+x -> [ctrl]+o以扩展名作为语法补充,以 vim内建的关键词,予以补齐

vim 环境设定与记录:~/.vimrc,~l.viminfo

vim 会主动的将你曾经做过的行为登录下来,记录在 ~/.viminfo 文件中。

在这里插入图片描述
整体 vim 的设定值一般是放置在 /etc/vimrc 这个文件,不过,不建议你修改他。可以修改~/.vimrc这个文件(预设不存在,自行手动建立 ),将所希望的设定值写入。

vim 常用指令示意图

在这里插入图片描述
图来源于:http://www.cnblogs.com/kevin2chen/p/6709968.html

Vim 使用注意事项

1.中文编码问题
中文编码有 big5 与 utf8 两种,如果文件是使用 big5 编码制作的,但在 vim 的终端接口中你使用的是万国码(utf8),编码不同,所以中文文件乱码。
这时考虑:
1.Linux系统默认支持的语系数据:这与/etc/locale.conf有关;
2.终端界面(bash)的语系:这与 LANG,LC_ALL这几个变数有关;
3.文件原本的编码;
4.开启终端机的软件,例如在 GNOME底下的窗口接口。

事实上最重要的是上头的第三与第四点,只要这两点的编码一致,你就能够正确的看到与编辑中文文件

先修改语系编码:

LANG=zh_TW.big5
export LC_ALL = zh_TW.big5

然后在终端接口工具栏的【终端机】–>【设定字符编码】–>【中文(正体)(BIG5)】项目点选一下,如果一切都没有问题了,再用vim 去开启那个 big5编码的文件,就没有问题了!

2.DOS 与Linux 的断行字符
可以利用cat -A来观察以 DOS (Windows系统)建立的文件的特殊格式,也可以发现在 DOS 使用的断行字符为^M$,称为CRLF 两个符号。而在 Linux 底下,则是仅有LF($)这个断行符号。

在 Linux 底下的指令在开始执行时,判断依据是【Enter】,而 Linux 的 【Enter】 为 LF 符号,不过,由于DOS 的断行符号是CRLF ,也就是多了一个 ^M 的符号出来。

在不同的系统之间复制一些纯文本文件时,要使用unix2dosdos2unix来转换一下断行格式。

语系编码转换

iconv -f 原本编码 -t 新编码 filename [-o newfile]

在这里插入图片描述
可以使用 iconv 进行文件语系编码的转换

《鸟哥的Linux私房菜-基础篇》学习笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/186793.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 HTML、CSS 和 JavaScript 创建图像滑块

使用 HTML、CSS 和 JavaScript 创建轮播图 在本文中&#xff0c;我们将讨论如何使用 HTML、CSS 和 JavaScript 构建轮播图。我们将演示两种不同的创建滑块的方法&#xff0c;一种是基于opacity的滑块&#xff0c;另一种是基于transform的。 创建 HTML 我们首先从 HTML 代码开…

WPF实战项目十七(客户端):数据等待加载弹框动画

1、在Common文件夹下新建文件夹Events&#xff0c;新建扩展类UpdateLoadingEvent public class UpdateModel {public bool IsOpen { get; set; }}internal class UpdateLoadingEvent : PubSubEvent<UpdateModel>{} 2、新建一个静态扩展类DialogExtensions来编写注册和推…

JSP EL 通过 三元运算符 控制界面 标签 标签属性内容

然后 我们来说说 EL配合三元运算符的妙用 我们先这样写 <% page contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %> <%request.setCharacterEncoding("UTF-8");%> <!DOCTYPE html> <html> <head>&l…

分布式篇---第六篇

系列文章目录 文章目录 系列文章目录前言一、说说什么是漏桶算法二、说说什么是令牌桶算法三、数据库如何处理海量数据?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码…

css三角,鼠标样式,溢出文字

目录 css三角 鼠标样式 例子&#xff1a;页码模块 溢出文字表示方式 margin负值运用 css三角强化 css三角 css三角中&#xff1a;line-height&#xff1a;0和font-size&#xff1a;0是防止兼容性的问题 jd {position: relative;width: 120px;height: 249px;background-…

【matlab程序】matlab利用工具包nctool读取grib2、nc、opendaf、hdf5、hdf4等格式数据

【matlab程序】matlab利用工具包nctool读取grib2、nc、opendaf、hdf5、hdf4等格式数据 引用&#xff1a; B. Schlining, R. Signell, A. Crosby, nctoolbox (2009), Github repository, https://github.com/nctoolbox/nctoolbox Brief summary: nctoolbox is a Matlab toolbox…

「Verilog学习笔记」数据串转并电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 关于什么是Valid/Ready握手机制&#xff1a; 深入 AXI4 总线&#xff08;一&#xff09;握手机制 - 知乎 时序图含有的信息较多&#xff0c;观察时序图需要注意&#xff1a…

YOLOv8改进 | 2023 | MPDIoU、InnerMPDIoU助力细节涨点

论文地址&#xff1a;官方论文地址点击即可跳转 代码地址&#xff1a;官方并没有开源的该损失的函数的代码&#xff0c;我根据文章内容进行了复现代码块在第三章 一、本文介绍 本文为读者详细介绍了YOLOv8模型的最新改进&#xff0c;带来的改进机制是最新的损失函数MPDIoU和融…

Django必备知识点(图文详解)

目录 day02 django必备知识点 1.回顾 2.今日概要 3.路由系统 3.1 传统的路由 3.2 正则表达式路由 3.3 路由分发 小结 3.4 name 3.5 namespace 3.4 最后的 / 如何解决&#xff1f; 3.5 当前匹配对象 小结 4.视图 4.1 文件or文件夹 4.2 相对和绝对导入urls​编辑…

脏页刷新机制总结

1、Buffer Cache和Page Cache 一句话解释&#xff1a;Page Cache用于缓存文件的页数据&#xff0c;Buffer Cache用于缓存块设备&#xff08;磁盘&#xff09;的块数据。但由于磁盘都是由文件系统管理的&#xff0c;所以会导致数据会被缓存两次&#xff0c;因此现在Linux已经不再…

Python Web开发基础知识篇

一&#xff0c;基础知识篇 本片文章会简单地说一些python开发web中所必须的一些基础知识。主要包括HTML和css基础、JavaScript基础、网络编程基础、MySQL数据库基础、Web框架基础等知识。 1,Web简介 Web&#xff0c;全称为World Wide Web&#xff0c;也就是WWW&#xff0c;万…

mysql索引分为哪几类,聚簇索引和非聚簇索引的区别,MySQL索引失效的情况有哪几种情况,MySQL索引优化的手段,MySQL回表

文章目录 索引分为哪几类&#xff1f;聚簇索引和非聚簇索引的区别什么是[聚簇索引](https://so.csdn.net/so/search?q聚簇索引&spm1001.2101.3001.7020)&#xff1f;&#xff08;重点&#xff09;非聚簇索引 聚簇索引和非聚簇索引的区别主要有以下几个&#xff1a;什么叫回…

Leetcode103 二叉树的锯齿形层序遍历

二叉树的锯齿形层序遍历 题解1 层序遍历双向队列 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 提示&#xff1a…

激光塑料透光率检测仪进行材料质量监控

焊接质量检测是对焊接成果的检测&#xff0c;目的是保证焊接结构的完整性、可靠性、安全性和使用性。焊接质量检测通常包括外观检验、内部检查、无损检测以及试件制作与送检等步骤。通过这些检测方法&#xff0c;可以全面评估焊接质量&#xff0c;确保其符合设计要求和规范标准…

2023.11.25-istio安全

目录 文章目录 目录本节实战1、安全概述2、证书签发流程1.签发证书2.身份认证 3、认证1.对等认证a.默认的宽容模式b.全局严格 mTLS 模式c.命名空间级别策略d.为每个工作负载启用双向 TLS 2.请求认证a.JWK 与 JWKS 概述b.配置 JWT 终端用户认证c.设置强制认证规则 关于我最后 本…

GoLang Filepath.Walk遍历优化

原生标准库在文件量过大时效率和内存均表现不好 1400万文件遍历Filepath.Walk 1400万文件重写直接调用windows api并处理细节 结论 1400万文件遍历时对比 对比条目filepath.walkwindows api并触发黑科技运行时间710秒22秒内存占用480M38M 关键代码 //超级快的文件遍历 fun…

GPS 定位信息分析:航向角分析及经纬度坐标转局部XY坐标

GPS 定位信息分析&#xff08;1&#xff09; 从下面的数据可知&#xff0c;raw data 的提取和经纬度的计算应该是没问题的 在相同的经纬度下&#xff0c; x 和 y 还会发生变化&#xff0c;显然是不正确的 raw data:3150.93331124 11717.59467080 5.3 latitude: 31.8489 long…

【Java】智慧工地云平台源码(APP+SaaS模式)

在谈论“智慧工地”之前&#xff0c;我们首先得知道传统工地为什么跟不上时代了。 说起传统工地&#xff0c;总有一些很突出的问题&#xff1a;比如工友多且杂&#xff0c;他们是否入场、身体状况如何&#xff0c;管理人员只能依靠巡查、手工纪录来判断&#xff0c;耗时耗力&am…

ctfshow sql

180 过滤%23 %23被过滤&#xff0c;没办法注释了&#xff0c;还可以用’1’1来闭合后边。 或者使用--%0c-- 1%0corder%0cby%0c3--%0c--1%0cunion%0cselect%0c1,2,database()--%0c--1%0cunion%0cselect%0c1,2,table_name%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_…

多线程Thread(初阶三:线程的状态及线程安全)

目录 一、线程的状态 二、线程安全 一、线程的状态 1.NEW Thread&#xff1a;对象创建好了&#xff0c;但是还没有调用 start 方法在系统中创建线程。 2.TERMINATED&#xff1a; Thread 对象仍然存在,但是系统内部的线程已经执行完毕了。 3.RUNNABLE&#xff1a; 就绪状态&…