Linux(7):Vim 程序编辑器

news2024/11/15 23:59:40

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私房菜-基础篇》学习笔记

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rust UI开发(二):iced中如何为窗口添加icon图标

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 想要了解如何构建简单窗口的可以看本系列的第一篇&#xff1a; Rust UI开发&#xff1a;使用iced构建UI时&#xff0c;如何在界面显示中文字符 本篇是系…

量子计算的发展

目录 一、量子力学的发展历程二、量子计算的发展历程三、量子计算机的发展历程四、量子信息科学的发展 一、量子力学的发展历程 量子力学是现代物理学的一个基本分支&#xff0c;它的发展始于20世纪初。以下是量子力学发展的几个重要阶段&#xff1a; 普朗克&#xff08;1900&…

ubuntu环境删除qtcreator方法

文章目录 方法1方法2方法3参考不同的安装方法,对应不同的删除方法 方法1 apt-get或者dpkg 方法2 QtCreatorUninstaller 方法3 MaintenanceTool

机器学习【02】在 Pycharm 里使用 Jupyter Notebook

只有 Pycharm 的 Professional 版才支持 Jupyter Notebook 本教程结束只能在pycharm中使用&#xff0c;下载的库在pycharm选中的虚拟环境中 ssh -L localhost:9999:localhost:8888 usernameip这句话每次都要用 准备 1.服务器安装jupyter sudo snap install jupyter2.在 Jup…

39 关于 binlog 日志

前言 bin log 相关 呵呵 记得之前是做过基于 binlog 的数据同步到的, 这里 可以来了解一下 binlog 的产生, 以及 相关更加详细的信息 说不定 之后也可以 做一个 binlog 的解析工具 这里 来看一下 各个常见的 binlog event 的相关格式 open-replicator 解析binlog失败 a…

npm pnpm yarn(包管理器)的安装及镜像切换

安装Node.js 要安装npm&#xff0c;你需要先安装Node.js。 从Node.js官方网站&#xff08;https://nodejs.org&#xff09;下载并安装Node.js。 根据你的需要选择相应的版本。 一路Next&#xff0c;直到Finish 打开CMD&#xff0c;输入命令来检查Node.js和npm是否成功安装 nod…

C语言-指针讲解(3)

文章目录 1.字符指针变量1.1 字符指针变量类型是什么1.2字符指针变量的两种使用方法&#xff1a;1.3字符指针笔试题讲解1.3.1 代码解剖 2.数组指针变量2.1 什么是数组指针2.2 数组指针变量是什么&#xff1f;2.2.3 数组指针变量的举例 2.3数组指针和指针数组的区别是什么&#…

AI模型训练——入门篇(一)

前言 一文了解NLP&#xff0c;并搭建一个简单的Transformers模型&#xff08;含环境配置&#xff09; 一、HuggingFace 与NLP 自从ChatGPT3 问世以来的普及性使用&#xff0c;大家或许才真正觉察AI离我们已经越来越近了&#xff0c;自那之后大家也渐渐的开始接触stable diff…

vue+springboot读取git的markdown文件并展示

前言 最近&#xff0c;在研究一个如何将我们git项目的MARKDOWN文档获取到&#xff0c;并且可以展示到界面通过检索查到&#xff0c;于是经过几天的摸索&#xff0c;成功的研究了出来 本次前端vue使用的是Markdown-it Markdown-it 是一个用于解析和渲染 Markdown 标记语言的 …

虹科Pico汽车示波器 | 汽车免拆检修 | 2011款瑞麒M1车发动机起动困难、加速无力

一、故障现象 一辆2011款瑞麒M1车&#xff0c;搭载SQR317F发动机&#xff0c;累计行驶里程约为10.4万km。该车因发动机起动困难、抖动、动力不足、热机易熄火等故障进厂维修。用故障检测仪检测&#xff0c;发动机控制单元&#xff08;ECU&#xff09;中存储有故障代码“P0340相…

C#/.NET/.NET Core推荐学习书籍(已分类)

前言 古人云&#xff1a;“书中自有黄金屋&#xff0c;书中自有颜如玉”&#xff0c;说明了书籍的重要性。作为程序员&#xff0c;我们需要不断学习以提升自己的核心竞争力。以下是一些优秀的C#/.NET/.NET Core相关学习书籍&#xff0c;值得.NET开发者们学习和专研。书籍已分类…

Vue3框架中让table合计居中对齐

第一步&#xff1a;给它加一个类名 center-table 如下&#xff1a; <el-table:data"datas.shows"max-height"600px"show-summarystripeborderstyle"width: 100%":header-cell-style"{ textAlign: center }":cell-style"{ text…

java - 选择排序

一、什么是选择排序 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。它的基本思想是每次从待排序的元素中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其放到已排序序列的末尾&#xff0c;直到所有元素排序完成。 具体步骤如下&…

LemMinX-Maven:帮助在eclipse中更方便地编辑maven的pom文件

LemMinX-Maven&#xff1a;https://github.com/eclipse/lemminx-maven LemMinX-Maven可以帮助我们在eclipse中更方便地编辑maven工程的pom.xml文件&#xff0c;例如补全、提示等。不用单独安装&#xff0c;因为在安装maven eclipse插件的时候已经自动安装了&#xff1a; 例…

第97步 深度学习图像目标检测:RetinaNet建模

基于WIN10的64位系统演示 一、写在前面 本期开始&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;RetinaNet模型。 二、RetinaNet简介 RetinaNet 是由 Facebook AI Research (FAIR) 的研究人员在 2017 年提出的一种目标检测模型。它是一种单阶段&#xff08;o…

【Linux基础】Linux常见指令总结及周边小知识

前言 Linux系统编程的学习我们将要开始了&#xff0c;学习它我们不得不谈谈它的版本发布是怎样的&#xff0c;谈它的版本发布就不得不说说unix。下面是unix发展史是我在百度百科了解的 Unix发展史 UNIX系统是一个分时系统。最早的UNIX系统于1970年问世。此前&#xff0c;只有…

两年功能五年自动化测试面试经验分享

最近有机会做一些面试工作&#xff0c;主要负责面试软件测试人员招聘的技术面试。 之前一直是应聘者的角色&#xff0c;经历了不少次的面试之后&#xff0c;多少也积累一点面试的经验&#xff0c;现在发生了角色转变。初次的面试就碰到个工作年限比我长的&#xff0c;也没有时…

ubuntu22.04 arrch64版操作系统编译zlmediakit

脚本 系统没有cmake&#xff0c;需要通过apt先进行下载&#xff0c;下面的脚本已经包含了 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64 ca…

R语言如何实现多元线性回归

输入数据 先把数据用excel保存为csv格式放在”我的文档”文件夹 打开R软件,不用新建,直接写 回归计算 求三个平方和 置信区间(95%)

springboot 返回problem+json

spring所有配置都在WebMvcAutoConfiguration中 其中有 ProblemDetailsExceptionHandler 容器中的一个组件 -ControllerAdvice用来集中处理异常的 -点进ResponseEntityExceptionHandler 包含这些异常&#xff0c;如果出现以下异常&#xff0c;会被springboot支持以RFC 7807规…