linux vi指令学习

2023-05-16

 

内容

命令/作用

打开文件

vi文件名

vi  文件名  +行号

退出/保存文件

:w  保存文件

:wq  保存文件并退出vi

:q!强制退出vi,即使该文件被修改,也不保存该文件

 

进入编辑模式

i在光标前开始插入文本

a在光标后开始插入文本

o在当前行之下新开一行,并到行首

O在当前行之上新开一行

光标移动

Ctrl +f向前滚动一整屏

Ctrl +b向后滚动一整屏

gg转至文件开头

G转至文件结尾

ngg/nG光标移至第n行的行首

(n为数字)

:n光标移至第n行的行首

(n为数字)

n+光标向下移动n行(n为数字)

n-光标向上移动n行(n为数字)

j/nj光标向下移动1行/n行(n为数字)

k/nk光标向上移动1行/n行(n为数字)

0(数字零)光标移至当前行行首

$光标移至当前行行末

h/nh光标向左移动1列/n列

(n为数字)

k/nk光标向右移动1列/n列

(n为数字)

w光标移动到下一个字的开头

b光标移动到上一个字的开头

fx搜索当前行中下一个出现字母x的地方

Fx搜索当前行中上一个出现字母x的地方

文本复制命令

yy复制当前行

nyy复制当前行及其后的n-1行

文本删除命令

x删除光标所在位置字符

X删除光标前的一个字符

nx删除光标所在位置以及之后的n-1个字符

nX删除光标前的n个字符

dw从光标处删至当前词尾

db从光标处删至当前词首

d0从光标处删至行首

d$/D  从光标处删至行尾

dd  删除光标所在行

ndd 删除当前行及其后的n-1行

文本粘贴命令

使用P键,

如复制当前行,先用yy复制当前行,切换到目的行的上一行后,用p来粘贴所复制的行。

如剪切当前行,先用dd复制当前行,切换到目的行的上一行后,用p来粘贴所剪切的行。

撤销命令

按u键来撤销上一步操作

查找及

替换命令

/pattern 从光标开始处向

文件尾搜索pattern(在/pattern之前先跳到第一行则进行全文件搜索),后按下n或N

 

 

注:

n在同一个方向重复上一次搜索命令

N在反方向重复上一次搜索命令

?pattern 从光标开始处向文件首部搜索pattern ,后按下n或N

:s/p1/p2/g将当前行中所有的p1均用p2替换,:s/p1/p2/gc替换时需要确认

:n1,n2s/p1/p2/g将n1至n2行中所有的p1均用p2替换,:n1,n2s/p1/p2/gc替换时需要确认

:%s/p1/p2/g将文件中所有的p1均用p2替换,:%s/p1/p2/gc替换时需要确认

一个编辑器具备的功能
1)打开文件、新建文件、保存文件
2)光标移动
3)文本编辑
4)(多行间|多列间)复制、粘贴、删除
5)查找和替换


vi编辑器的配置
cd /etc/vim
cp vimrc ~/.vimrc
cd ~
gedit .vimrc
在.vimrc中加入如下内容:

"关闭兼容功能
set nocompatible 
"显示行号 
set number
"编辑时 backspace 键设置为2个空格
set backspace=2
"编辑时 tab 键设置为4个空格
set tabstop=4
"设置自动对齐为4个空格
set shiftwidth=4
"搜索时不区分大小写
set ignorecase
"搜索时高亮显示
set hlsearch


vi编辑器有三种模式
1)一般模式(光标移动、复制、粘贴、删除)
2)编辑模式(编辑文本)
3)命令行模式(查找和替换)


注意:
1)当不知道处于何种模式时,按ESC键返回到一般模式。
2)wq(write quit)
3)i(insert)

1.打开文件、新建文件、保存文件
    vi 文件名
    如果文件存在,输入结束后,:wq保存并退出文件
    如果文件不存在,输入结束后,:wq就可以新建并保存文件
    
在编辑完成时,返回一般模式,
1)输入:w则保存文件,如果已经保存文件,输入:q则退出文件
2)直接输入:wq保存并退出
3)如果不想保存被修改的内容,则:q!强制退出。

2.进入编辑模式
i(在光标前开始插入文本)
a在光标后开始插入文本
o(在当前行之下新开一行,并到行首)

3.光标移动
在一般模式下,hjkl这四个按键就可以移动光标
h(左)
j(下)
k(上)
l(右)

快速的定位到某一行:
文件头、文件尾、指定某一行
ngg光标移至第n行的行首(n为数字),
    如1gg就跳到第一行的行首,就是文件头
    如2gg就跳到第二行的行首
    
G转至文件结尾
注意:ngg和G是在一般模式

在某一行如何快速定位到某一列
0(数字零)光标移至当前行行首
$光标移至当前行行末
fx搜索当前行中下一个出现字母x的地方
注意:0、$、fx是在一般模式

vi的难点:
1)vi操作之前,先判断一下当前是哪一种模式,再看光标所在位置。
当你不知道处于何种模式时,使用esc键返回到一般模式。
再看光标,难点在于移动光标,可以做到快速切换到某一行某一列。

4.文本复制、粘贴、删除、撤销
yy复制当前行(y:yank(复制))   
nyy复制当前行及其后的n-1行(n是数字)
使用P键来粘贴(p:paste)

dd  删除光标所在行(d:delete)
ndd 删除当前行及其后的n-1行(n是数字)
按u键来撤销上一步操作
x删除光标所在位置的字符
注意:
yy/nyy/dd/ndd/x/u都是在一般模式。

5.查找和替换
/pattern 从光标开始处向文件尾搜索pattern,后按下n或N
注意:
n在同一个方向重复上一次搜索命令
N在反方向重复上一次搜索命令
n(N)来源于next

注意:
在/pattern之前先跳到第一行则进行全文件搜索。
:%s/p1/p2/g将文件中所有的p1均用p2替换
:%s/p1/p2/gc替换时需要确认
s:substitute替换
g:global全局
c:confirm确认
 
vi的难点:
1)vi操作之前,先判断一下当前是哪一种模式,再看光标所在位置。
当你不知道处于何种模式时,使用esc键返回到一般模式。
再看光标,难点在于移动光标,可以做到快速切换到某一行某一列。

vi编辑器有三种模式
1)一般模式(光标移动、复制、粘贴、删除、撤销)
   hjkl、ngg/G、0、$、fx
   yy/nyy
   p
   dd/ndd、x
   u
2)编辑模式(编辑文本)
   i  a o
3)命令行模式(查找和替换、保存退出文件)
   /pattern、:%s/p1/p2/gc、:wq


 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux vi指令学习 的相关文章

  • 我在哪里可以学习如何使 C++ 程序与操作系统 (Linux) 交互

    我是一个 C 初学者 我想创建与操作系统交互的小程序 使用 Kubuntu Linux 到目前为止 我还没有找到任何教程或手册来让 C 与操作系统交互 在 PHP 中 我可以使用命令 exec 或反引号运算符来启动通常在控制台中执行的命令
  • 使用 MongoDB docker 镜像停止虚拟机而不丢失数据

    我已经在 AWS EC2 上的虚拟机中安装了官方的 MongoDB docker 映像 并且数据库上已经有数据 如果我停止虚拟机 以节省过夜费用 我会丢失数据库中包含的所有数据吗 在这些情况下我怎样才能让它持久 有多种选择可以实现此目的 但
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • Linux TCP服务器:在接受连接之前读取客户端的IP地址

    Related C Winsock API如何在接受连接之前获取连接客户端IP https stackoverflow com questions 716209 c winsock api how to get connecting cli
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • /proc/PID 文件格式

    我想从中检索一些流程信息 proc目录 我的问题如下 中的文件是否有标准格式 proc PID 例如 有这个proc PID status文件与Name t ProcName在第一行 我可以在其他地方用空格代替这个文件吗 t或者类似的东西
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • 是否有可能通过 mmap 匿名内存“打孔”?

    考虑一个使用大量大致页面大小的内存区域 例如 64 kB 左右 的程序 每个内存区域的寿命都相当短暂 在我的特定情况下 这些是绿色线程的替代堆栈 如何最好地分配这些区域 以便一旦该区域不再使用 它 们的页面可以返回到内核 天真的解决方案显然
  • Xenomai 中的周期性线程实时失败

    我正在创建一个周期性线程 它在模拟输出上输出方波信号 我正在使用 Xenomai API 中的 Posix Skin 和 Analogy 我使用示波器测试了代码的实时性能 并查看了方波信号 频率为 1kHz 的延迟 我应该实现 250us
  • 如何在 Linux x86_64 上模拟 iret

    我正在编写一个基于 Intel VT 的调试器 由于当 NMI Exiting 1 时 iret 指令在 vmx guest 中的性能发生了变化 所以我应该自己处理vmx主机中的NMI 否则 guest会出现nmi可重入错误 我查了英特尔手
  • 是否有可能在linux中找到包含特定文本的文件?

    考虑这种情况 我在文件夹 Example 下有很多文件 如果我需要找到一个包含特定短语 如 Class Example 的文件 我该如何使用 Linux shell 来做到这一点 linux中有类似 定位 的函数可以做到这一点吗 Thank
  • 在 shell 脚本中查找和替换

    是否可以使用 shell 在文件中搜索然后替换值 当我安装服务时 我希望能够在配置文件中搜索变量 然后在该值中替换 插入我自己的设置 当然 您可以使用 sed 或 awk 来完成此操作 sed 示例 sed i s Andrew James
  • 无关的库链接

    我有一个可能有点愚蠢的问题 因为我很确定我可能已经知道答案了 假设你有静态库A 动态共享库B和你的linux下的程序C 假设库 A 调用库 B 中的函数 并且您的程序调用库 A 中的函数 现在假设 C 在 A 中调用的所有函数都不使用 B
  • 进程名称长度的最大允许限制是多少?

    进程名称允许的最大长度是多少 我正在读取进程名称 proc pid stat文件 我想知道我需要的最大缓冲区 我很确定有一个可配置的限制 但就是找不到它在哪里 根据man 2 prctl http man7 org linux man pa
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • gentoo crontab:为什么这个简单的 crontab 不起作用?

    我使用 GENTOO 发行版 crontab e 35 12 root php5 home www cron php 当我手动运行时 php5 php5 home www cron php 这有效 它向我发送了一封电子邮件 然后我检查日期
  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将

随机推荐