嵌入式学习笔记---VIM常用操作和命令

2023-11-16

嵌入式学习笔记—VIM常用操作和命令

写在前面

这里我使用的开发环境是Windows下的Cygwin软件,如果不想下载虚拟机什么的,用这个日常开发完全够,具体的下载安装教程网上一大把,可以参考其他博主。

一些配置文件

1. 定义:

Cygwin是一个运行在Windows下的仿真Linux的软件

2. .bashrc

可以理解为bash run configuration(运行配置),位于home目录下(~/.bashrc),里面可以保存一些个性化设置,比如别名(alias),路径等。
具体操作:vim ~/.bashrc
个性化指令:alias ll=“ls -lha”(注意:设置别名的时候=左右不要有空格哦!)
设定环境路径:PATH=$PATH:路径
export PATH
提示符设置:PS1=“[\u: \w] $”

3. .bash_profile

常用于配置环境变量和用户一些自定义别名等,只表示当前用户的设置

4. .vimrc

VIM的配置文件,可以根据自己的习惯进行配置
系统vim配置文件/etc/vimrc
用户vim配置文件~/.vimrc
优先级:用户>系统

5.alias

别名,简化复杂的命令,例如alias la=‘ls -A’
检查是否是别名:which la
删除别名:unalias la

6.grep

主要用于查找文件中符合条件的字符串,统计相对应的行和行数
常用的参数:

参数选项 解释说明
-v(–invert-match) 排除符合的结果,显示其余部分
-n(–line-number) 显示符合的行和行号
-i(–ignore-case) 不区分大小写
-c(–count) 只统计符合的行数
-E(–extended-regexp) 使用egrep命令
–color = auto 为grep过滤结果添加颜色
-w(–word-regexp) 只匹配符合条件的单词
-o(–only-matching) 只输出符合条件的内容

补充知识

①在Linux平台下, 所有文件的结尾都有一个$符,cat -A可以查看、

②一些符号和含义

符号 含义
^ 表示开始
$ 表示结束
. 表示任意一个字符,有且只有一个,不包括空行
& 代表匹配的内容
* 表示找出前一个字符0次或一次以上
1~2 表示从第一行开始,每隔两行进行相应操作
1,2 表示对1到2行进行操作
! 表示取反

以上标识可以任意组合,比如:
^$ 表示空行;
.* 表示所以内容,包括空行
^.t 表示以任意内容开头, 直到t结束
(,.
)表示逗号后的所在内容

③[ ]表示匹配中括号中任意一个字符, 字符之间是或的关系,只要满足其中一个字符就行。

7.sed

sed遍历文件内容,读到符合条件的行就根据相应指令做操作,不符合条件就跳过。

命令 含义
a(追加append) 在符合条件的后面插入内容
i(插入insert) 在符合条件的前面插入内容
c(更改change) 更改匹配行的内容
d(删除delete) 删除匹配的内容
s(替换substitute) 替换掉匹配的内容
p(打印print) 打印出匹配的内容,通常与-n选项和用
= 用来打印被匹配的行的行号
n(nextline) 读取下一行,遇到n时会自动跳入下一行
r(read),w(write) 读和写编辑命令

操作之间用分号隔开,比如:

sed 's/^#.*//;/^$/d' main.c

表示 先替换main.c文件中所有注释的空行为空行,然后删除空行

举例说明:
①追加 ------a

sed -i '3ahello' main.c

表示向第三行后面添加hello,-i是保存,不加的话就是预览模式

sed -i '/22/achina' main.c

表示批量添加,向内容22后面添加china,如果文件中有多行包 括22,则每一行后面都会添加

②插入 ------i

sed '3igood' main.c 

表示在第三行之前插入good

sed '/china/inice' main.c 

表示在包含china之前的行插入数据,如果含多个,则都会插入

③更改 ------c

sed '7cworld' main.c  

表示将第7行的替换为world

sed '/22/cgoto' main.c    

表示将包含22的全部替换为goto

④删除 ------d

sed '7d' main.c    

表示删除第7行的数据

sed '/china/,$d' main.c   

表示删除从匹配到china的行到最后一行

sed '1,5{/china/d}' main.c  

表示删除1~5行中,匹配内容china的行

⑤替换 ------s

sed 's/love/爱/' main.c  

表示将love替换成爱,默认只替换每行第一个love

sed 's/love/爱/g' main.c  

表示g可将所有love替换成爱

sed 's/love/爱/2' main.c  

表示2可将每行第二个匹配到的love替换成爱

⑥打印 ------p

sed -n '4p' main.c   	  

表示打印文件中的第4行内容

sed -n '/love/p' main.c    

表示逐行读取文件,打印匹配love的行

⑦行号 ------=

sed -n "$=" main.c      

表示打印文件最后一行的行号

sed -n '/error/=' main.c  

表示打印匹配error的行的行号

⑧读取 ------r

sed 'r 2.txt' 1.txt   

表示将文件2.txt中的内容,读入1.txt中,会在1.txt中的每一行后都读入2.txt 的内容

sed '3r 2.txt' 1.txt   

表示在1.txt第三行之后插入文件2.txt的内容

⑨写入 ------w

sed -n 'w 2.txt' 1.txt  

表示将1.txt文件的内容写入2.txt文件,如果2.txt文件不存在 则创建,如果2.txt存在则覆盖之前的内容

熟悉VIM常用命令,快捷键,操作

1.VIM常用命令
①插入命令:在命令模式下输入i a o 三个其中一个字母即可进入编辑模式

以下命令都是在命令模式下面操作,如果在编辑模式下,按Esc键即可退出,切换到命令模式。

②定位命令:

命令 作用
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
nG 或 :n 到第n行
$ 移至行尾 (我一般用键盘上面的End键)
0 移至行首 (我一般用键盘上面的Home键)

③删除命令:

命令 作用
x 删除光标所在的字符
nx 删除光标所在处后n个字符
dd 删除光标所在行,ndd删除n行
dG 删除光标所在行到文件末尾的内容
D 删除光标所在处到行尾的内容
:n1,n2d 删除指定范围的行

④复制和剪切命令:

命令 作用
yy 复制当前行
nyy 复制当前行以下n行
dd 剪切当前行(这个和删除不冲突,实测确实可以剪切)
ndd 剪切当前行以下n行
P或者p 粘贴在当前光标下

⑤保存和退出命令:

命令 作用
:w 保存修改
:w new_filename 另寻为指定文件
:wq 保存修改并退出
ZZ 快捷键,保存修改并退出
:q! 不保存修改退出
:wq! 保存修改并退出(文件所有者及root可使用)

2.VIM操作
①查找:

快捷键 功能
/abc 从光标所在位置向前查找字符串abc
/^abc 查找以abc为行首的行
/abc$ 查找以abc为行尾的行
?abc 从光标所在为主向后查找字符串 abc
n 向同一方向重复上次的查找指令
N 向相反方向重复上次的查找指令

②替换:
r:替换光标所在位置的字符
R:从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按 “Esc”可以结束
:s/a1/a2/g:将当前光标所在行中的所有a1用a2替换(在编辑模式下操作)
③删除插入:直接用上述表格的删除命令
④复制粘贴:直接用上述表格的复制命令

写在最后

现在是一名刚刚起步嵌入式的小白,如果大家有疑问或者指正请积极提出,共勉!

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

嵌入式学习笔记---VIM常用操作和命令 的相关文章

  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 为什么使用 键取消搜索时 vim incsearch 会暂停?

    在 vim 中 如果你set incsearch然后它将滚动到当前搜索词的下一个匹配项 而无需移动光标 我经常用它来阅读一段代码而不用将光标移动到那里 因为我可以点击
  • 在 Archlinux 上使用 Vim 作为 Haskell 的 IDE 目前情况如何?

    如果可行的话 我的目标是通过 YouCompleteMe 在 Vim 中完成 Haskell 的命令 在这方面 正如您在下面看到的 我还没有找到关于如何让它发挥作用的共识 相关评论的最新评论YouCompleteMe 上的问题 https
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • 为什么使用signalfd无法捕获SIGSEGV?

    我的系统是ubuntu 12 04 我将示例修改为man 2 signalfd 并添加sigaddset mask SIGSEGV 在示例中 但我无法得到输出SIGSEGV被生成 这是一个错误吗glibc 源代码片段如下 sigemptys
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • Linux 中有没有一种轻量级的方法来获取当前进程数?

    我希望我的 基于 C C 的 程序显示一个数字指示器 指示本地系统上当前有多少个进程 将经常查询正在运行的进程数值 例如每秒一次 以更新我的显示 有没有一种轻量级的方法来获取该数字 显然我可以调用 ps ax wc l 但我不想强迫计算机生
  • BeagleBone Black 如何用作大容量存储设备?

    是否可以使用 BB 作为大容量存储设备 我希望将其连接到可以从 USB 连接 例如 USB 闪存驱动器 读取文件的音频播放器并充当包含一个特定文件夹的数据存储设备 及其子文件夹 从文件系统 如果可能 在连接到开发板的闪存驱动器上 正如设备规
  • 在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法

    我有一个 dotnet SDK sln and a build proj with
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置
  • Vim 和 snipMate(插件)- 添加新代码片段不起作用

    我正在尝试为我的 snipMate 插件创建一个新的片段 我使用一些名为 即 myfile endfile 的文件 所有 endfile 文件都应具有与 html 文件相同的 片段 所以我做了 cp html snippet endfile
  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • 如何在C程序中直接改变显存映射来绘制像素(无需库函数)

    是否可以通过使用 C 程序更改 RAM 中屏幕 视频即监视器 内存映射中的值来显示黑点 我不想使用任何库函数 因为我的主要目标是学习如何开发简单的操作系统 我尝试访问起始屏幕内存映射 即 0xA0000 在 C 中 我尝试运行该程序 但由于
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • 设置 Vim 背景颜色

    当我尝试更改背景颜色时 vimrc或者直接在 Vim 中使用以下命令 set background dark 这根本不影响我的背景 也没有light选项 不过 当我运行 gvim 时 看起来还不错 有没有办法在不更改 Konsole 设置的
  • tar.gz 和 tgz 是同一个东西吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了 tgz 文件tar czvf filecommand then 我最终得到了一个 tgz 文件 我想知道它和tar gz 之间的
  • 在Linux中创建可执行文件

    我计划做的一件事是编写 非常简单的 Perl 脚本 并且我希望能够在不从终端显式调用 Perl 的情况下运行它们 我明白 要做到这一点 我需要授予他们执行权限 使用 chmod 执行此操作非常简单 但它似乎也是一个稍微费力的额外步骤 我想要

随机推荐

  • 第十一届蓝桥杯——矩阵(应试做法---卡特兰数)

    前言 直接把它当做一道规律题来做 矩阵 问题描述 把 1 2020 放在 2 1010 的矩阵里 要求同一行中右边的比左边大 同一列中下边的比上边的大 一共有多少种方案 答案很大 你只需要给出方案数除以 2020 的余数即可 答案提交 这是
  • [Pyecharts]数据可视化 大屏展示

    Pyecharts 大屏展示 练习 前言 1 条件 2 代码及展示 时间序列曲线图 时间轮播 24小时轮播 1 2 3 拥堵路段词云图 拥堵榜 通畅榜 水球图 标题 交通流量预测可视化大屏 合并 调整 3 总结 前言 参考 pyechart
  • NumPy通用函数、利用NumPy数组进行数据处理

    文章目录 一 NumPy通用函数 1 什么是通用函数 2 常见的一元通用函数如下 3 常见的二元通用函数如下表 二 利用NumPy数组进行数据处理 1 将条件逻辑转为数组运算 2 数组统计运算 3 数组排序 sort 方法没有返回值 4 检
  • Qt信号接收不到

    问题 emit signal 语句执行后 相应的对象控件接收不到信号 方法 创建了多个对象 一个对象发送信号 但是另一个不同的控件接收不到
  • 【团体程序设计天梯赛-练习集】L2-009 抢红包(25分)

    团体程序设计天梯赛 练习集 L2 009 抢红包 25分 题目 题目链接 L2 009 抢红包 25 分 没有人没抢过红包吧 这里给出N个人之间互相发红包 抢红包的记录 请你统计一下他们抢红包的收获 输入格式 输入第一行给出一个正整数N 1
  • Go语言模拟实现简单的区块链

    一 创建项目 按照Go语言最佳实践的思路 在工作空间下的src目录下创建 github com hangzhou huxin blokcchain目录作为我们的项目目录 然后用GoLand工具选中这个项目并打开 二 项目源码 先在项目目录下
  • Android弹簧动画 Rebound实战

    转载请注明出处 http blog csdn net ym4189 article details 77099881 前言 之前需要做一个弹簧效果的动画 网上一看 大家都用Rebound框架 这里简单写一下 rebound是facebook
  • 前端 Leader 如何做好团队规划?阿里内部培训总结公开

    行成于思 毁于随 韩愈 在阿里从一线前端工程师到技术 TL Team Leader 也三年有余了 最重要最难的就是做规划 你可能会遇到如下几个问题 业务压力巨大 前端是瓶颈 如何做合适的规划 如何提高规划的成功率 规划的雷区是什么 如何寻找
  • NUC980开源项目33-自动分配设备号和设备节点

    上面是我的微信和QQ群 欢迎新朋友的加入 本来是为点灯准备的驱动 不过现在还没正常操作IO口 就是分配节点和设备号 驱动代码 include
  • 关于c++的批量注释快捷键使用及调整

    在接触c 编译的时候 想大批量的给一些代码注释 但一行一行注释又显得麻烦 在vs中是支持批量注释的 我用的是vs2013 下面是vs批量注释的方法 两个组合的按键方法 批量注释 Ctrl K Ctrl C 取消注释 Ctrl K Ctrl
  • 企业架构

    一 架构能力建设和架构治理 为确保架构功能在企业中能够被成功运用 企业需要通过建立适当的组织结构 流程 角色 责任和技能来实现其自身的企业架构能力 这正是TOGAF的架构能力框架 Architecture Capability Framew
  • 基于数据驱动的电动车电池数据分析(一)

    基于数据驱动的电动车电池数据分析 一 欢迎关注笔者的微信公众号 笔者过去一年多的时间都在国内一家头部新能源企业实习 主要参与一些数据分析和平台研发的工作 在工作中积累了一些数据分析的经验 其中新能源领域比较多的是一些化工生产 智能制造方面的
  • CMAKE——set()函数及常用变量名

    set 将一个 CMAKE 变量设置为给定值 set
  • PAT乙级 1029旧键盘 python

    题目 思路 将输入与输出逐位对比 将不相等的记录下来即可 代码 input input print input bad key 记录坏掉的键盘 upper 将所有小写字符转为大写 lower 将所有大写转为小写 print position
  • wait notify正确使用方式

    wait notify正确使用方式 假设 当线程 Thread03 在1 100中找出77并输出后 Thread01 输出所有1 100中的奇数 当线程 Thread03 在1 100中找出88并输出后 Thread02 输出所有1 100
  • 使用expect实现scp远程复制文件

    expect安装 yum install y expect expect基本命令了解 spawn 交互程序开始后面跟命令或者指定程序 expect 获取匹配信息匹配成功则执行expect后面的程序动作 send exp send 用于发送指
  • 水仙花数的求解

    话不多说 直接给各位上小菜 package com znzz JavaTest public class FlowerTest 思路 水仙花数 指一个 n gt 3 n位正整数 其每位的数值的n次方之和等于本身 例如 153 1 3 5 3
  • 如何治理 Electron 版本淘宝直播应用崩溃?

    经过几个月的努力 基于Electron框架开发的新版淘宝直播推流软件终于上线了 随之而来的就是线上用户反馈的各种问题 其中最影响用户体验的当属应用崩溃问题了 当应用程序出现未 catch 的异常时就会发生崩溃 本文介绍了客户端应用崩溃的处理
  • UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd7 in position 2: invalid continuation byte问题

    报错提示如下 self disease wds i strip for i in open self disease path encoding UTF 8 if i strip File C Users luckyli anaconda3
  • 嵌入式学习笔记---VIM常用操作和命令

    嵌入式学习笔记 VIM常用操作和命令 写在前面 这里我使用的开发环境是Windows下的Cygwin软件 如果不想下载虚拟机什么的 用这个日常开发完全够 具体的下载安装教程网上一大把 可以参考其他博主 一些配置文件 1 定义 Cygwin是