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

vim编辑器

一、vi的使用

1. vi的三种模式

  • 一般指令模式(command mode)

  • 编辑模式(insert mode)

  • 命令行命令模式(command-line mode)

2. 一般指令模式:光标移动

h或左方向键:光标向左移动一个字符;
j或下方向键:光标向下移动一个字符;
k或上方向键:光标向上移动一个字符;
l或右方向键:光标向右移动一个字符;
[number][hjkl]:向某方向移动number列;
[Ctrl]+[f]:屏幕向下移动一页;[Page Down]
[Ctrl]+[b]:屏幕向上移动一页;[page Up]
[Ctrl]+[d]:屏幕向下移动半页;
[Ctrl]+[u]:屏幕向上移动半页;
+:光标移动到非空白字符的下一列;
-:光标移动到非空白字符的上一列;
n<space>:光标向右移动n个字符;
0或[Home]:移动到这一列的最前面字符处;
$或[End]:移动到这一列的最后面字符处;
H:光标移动到这个屏幕的最上方那一列的第一个字符;
M:光标移动到这个屏幕的中央那一列的第一个字符;
L:光标移动到这个屏幕的最下方那一列的第一个字符;
G:移动到这个文件的最后一列(常用);
nG:n为数,移动到这个文件的第n列;
gg:移动到这个文件的第一列,相当于1G;
n<Enter>:n为数字,光标向下移动n列。

3. 一般指令模式:搜寻与取代

/word:向光标之下寻找一个名称为word的字串;
?word:向光标之上寻找一个字串名称为word的字串;
n:重复前一个搜寻的动作;
N:与n刚好相反,为“反向”进行前一个搜寻动作;
:n1,n2s/word1/word2/g:n1与n2为数字,在第n1与n2列之间寻找 word1这个字串,并将该字串取代为word2;
:1,$s/word1/word2/g:从第一列到最后一列寻找word1字串,并将该字串取代为word2;
:1,$s/word1/word2/gc:从第一列到最后一列寻找word1字串,并将该字串取代为word2,且在取代前显示提示字符给使用者确(confirm)是否需要取代。

4. 一般指令模式:删除、复制与贴上

x, X:在一列字当中,x为向后删除一个字符 (相当于 [del] ),X为向前删除一个字符(相当于 [backspace] );
nx:n为数字,连续向后删除n个字符;
dd:删除光标所在的那一整列;
ndd:n为数字。删除光标所在的向下n列;
d1G:删除光标所在到第一列的所有数据;
dG:删除光标所在到最后一列的所有数据;
d$:删除光标所在处,到该列的最后一个字符;
d0:那个是数字的0,删除光标所在处,到该列的最前面一个字符;
yy:复制光标所在的那一列;
nyy:n为数字。复制光标所在的向下n列;
y1G:复制光标所在列到第一列的所有数据;
yG:复制光标所在列到最后一列的所有数据;
y0:复制光标所在的那个字符到该列行首的所有数据;
y$:复制光标所在的那个字符到该列行尾的所有数据;
p, P:p为将已复制的数据在光标下一列贴上,P 则为贴在光标上一列; 
J:将光标所在列与下一列的数据结合成同一列;
c:重复删除多个数据,例如向下删除 10 列,[10cj];
u:复原前一个动作;
[Ctrl]+r:重做上一个动作;
.:这就是小数点,意思是重复前一个动作的意思。

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

i,I:进入插入模式(Insert mode),i为“从目前光标所在处插入”,I为“在目前所在列的第一个非空白字符处开始插入”;
a,A:进入插入模式(Insert mode),a为“从目前光标所在的下一个字符处开始插入”,A为“从光标所在列的最后一个字符处开始插入”;
o,O:进入插入模式(Insert mode),o为“在目前光标所在的下一列处插入新的一列”;O为在目前光标所在处的上一列插入新的一列;
r,R:进入取代模式(Replace mode),r只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下ESC为止;
[Esc] 退出编辑模式,回到一般指令模式中;

6. 命令行界面的储存、离开等指令

:w:将编辑的数据写入硬盘文件中;
:w!:若文件属性为“只读”时,强制写入该文件。不过,到底能不能写入,还是跟你对该文件的文件权限有关;
:q:离开vi;
:q!:若曾修改过文件,又不想储存,使用!为强制离开不储存盘案;
:wq:储存后离开,若为:wq!则为强制储存后离开;
ZZ:若文件没有更动,则不储存离开,若文件已经被更动过,则储存后离开;
:w[filename]:将编辑的数据储存成另一个文件;
:r[filename]:在编辑的数据中,读入另一个文件的数据;
:n1,n2 w [filename]:将n1到n2的内容储存成filename这个文件;
:!command:暂时离开vi到命令行界面下执行 command 的显示结果;

7. vim环境的变更

:set nu:显示行号,设置之后,会在每一列的字首显示该列的行号;
:set nonu:与set nu相反,为取消行号;

二、vim的额外功能

1. 区块选择

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

2. 多文件编辑

:n:编辑下一个文件;
:N:编辑上一个文件;
:files:列出目前这个vim的打开的所有文件;

3. 多窗口功能

: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;

4. 挑字补全功能

[ctrl]+x -> [ctrl]+n:通过目前正在编辑的这个“文件的内容文字”作为关键字,予以补齐;
[ctrl]+x -> [ctrl]+f:以当前目录内的“文件名”作为关键字,予以补齐;
[ctrl]+x -> [ctrl]+o:以扩展名作为语法补充,以 vim 内置的关键字,予以补齐;

5. 环境设置与记录

:set nu
:set nonu:就是设置与取消行号;
:set hlsearch
:set nohlsearch:hlsearch就是high light search(高亮度搜寻)。这个就是设置是否将搜寻的字串反白的设置值。默认值是hlsearch;
:set autoindent
:set noautoindent:是否自动缩排。autoindent就是自动缩排。
:set backup:是否自动储存备份文件。一般是nobackup的,如果设置 backup的话,那么当你更动任何一个文件时,则原始文件会被另存成一个文件名为filename~的文件。
:set ruler:显示或不显示右下角的一些状态列说明;
:set showmode:是否要显示--INSERT--之类的字眼在左下角的状态列;
:set backspace=(012):当backspace为2时,就是可以删除任意值;0 或1时,仅可删除刚刚输入的字符,而无法删除原本就已经存在的文字了;
:set all:显示目前所有的环境参数设置值;
:set:显示与系统默认值不同的设置参数;
:syntax on
:syntax off:是否依据程序相关语法显示不同颜色;
:set bg=dark
:set bg=light:可用以显示不同的颜色色调,默认是“light”;

三、vim注意事项

1. 中文编码问题

  • Linux系统默认支持的语系数据(/etc/locate.conf);

  • 终端接口(bash)的语系(LANG、LC_ALL);

  • 文件原本的编码;

  • 打开终端机的软件;

2. DOS与Linux断行字符

3. 语系编码转换

iconv --list
iconv -f 原本编码 -t 新编码 filename [-o newfile]
--list:列出iconv支持的语系数据;
-f:from,亦即来源之意,后接原本的编码格式;
-t:to,亦即后来的新编码要是什么格式;
-o file:如果要保留原本的文件,那么使用-o新文件名,可以创建新编码文件;


http://www.kler.cn/a/17384.html

相关文章:

  • 【初阶数据结构与算法】线性表之链表的分类以及双链表的定义与实现
  • FastDDS服务发现之EDP的收发
  • 【计网】数据链路层笔记
  • ADO.NET数据处理框架
  • 在vscode中如何利用git 查看某一个文件的提交记录
  • 通过命令学习k8s
  • Build生成器模式
  • (二)【平衡小车制作】电机驱动(超详解)
  • 内存越界是否一定会导致程序崩溃吗?详解内存越界
  • CUDA下载,以及下载GPU版本的pytorch
  • JAVA基于Springboot框架的停车场管理系统开发实践和实现【附源码】
  • DP动态规划
  • 1.rabbitMQ介绍
  • JavaScript闭包的基本原理和应用场景
  • 人的全面发展评价指标体系—基于相关-主成分分析构建
  • 2000-2019年30省研发资本存量(含计算过程和原始数据)
  • 大数据Doris(八):Broker部署和集群启停脚本
  • 高效学习方法和工具推荐,让你事半功倍!
  • clickhouse里的数组数据类型与相关使用介绍
  • 【C++复习1】程序结构和C++的工作原理
  • Java程序设计入门教程--数组
  • 小球下落(dropping balls)uva679
  • go 打包文件夹成zip文件
  • Envoy控制面实践
  • 漫画 | Linux之父:财务自由以后,我失眠了!
  • 华为OD机试 - 整理扑克牌(Python)