VIM工程的编译 / VI的快捷键记录

文章目录

    • VIM工程的编译 / VI的快捷键记录
    • 概述
    • 笔记
    • 工程的编译
    • 工程的编译 - 命令行vim
    • 工程的编译 - GUI版vim
    • 备注
    • VIM的帮助文件位置
    • VIM官方教程
    • vim 常用快捷键
    • 启动vi时, 指定要编辑哪个文件
      • 正常模式
      • 光标的移动
      • 退出不保存
    • 退出保存
    • 只保存不退出
    • 另存到指定文件
    • 移动到行首
    • 移动到行尾
    • 删除一个字符
    • 删除单词
    • 删除到单词结尾
    • 删除到行尾
    • 删除整行(剪切整行到剪贴板)
    • 在本行的下面一行粘贴
    • 删除N行
    • 撤销(undo)
    • 重做(redo)
    • 进入插入模式
    • 替换一个字符
    • 进入附加模式
    • 从当前光标开始删除到单词尾部, 并进入编辑模式
    • 从当前光标开始删除到行尾, 并进入编辑模式
    • 显示当前行列位置
    • 跳到文件结尾
    • 跳到指定行
    • 跳到文件开头
    • 查找时忽略大小写
    • 查找(搜索)
    • 逆向查找
    • 在查找过程中导航
    • 匹配括号(大{},中[],小()括号就可以)
    • 在VIM界面上, 执行外部命令
  • 复制/粘贴
    • 显示行号
    • 备注
    • END

VIM工程的编译 / VI的快捷键记录

概述

装了debain12.4, 用VI的时候, 只是简单的用. 感觉不顺手.
去查VI的快捷键, 不同资料虽然说的大概相同,但是细节说的不一样.

就想去看看对应的源码, 看看代码里面怎么说, 毕竟代码是不会骗人的.
没有一个集成环境, 不好看代码. 好多main(), 不知道看哪个…
用IDA看, 是从VimMain()开始的. 由于没有一个舒服的IDE环境来单步, 看着也不方便(最主要的是, 如果不能单步调试, 逻辑是看不出来的).
在这里插入图片描述

认怂了, 还是得看vi软件本身带的帮助.

笔记

在debian12.4下, 没有vim, 只有vi.

lostspeed@debian12d4x64:~$ type vim
bash: type: vim: 未找到
lostspeed@debian12d4x64:~$ which vim
lostspeed@debian12d4x64:~$ 
lostspeed@debian12d4x64:~$ type vi
vi 已被录入哈希表 (/usr/bin/vi)
lostspeed@debian12d4x64:~$ which vi
/usr/bin/vi

查看vi版本

lostspeed@debian12d4x64:~$ vi --version -a
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled May 04 2023 10:24:44)
Included patches: 1-1378, 1499
Modified by team+vim@tracker.debian.org
Compiled by team+vim@tracker.debian.org
Tiny version without GUI.  Features included (+) or not (-):
+acl               +file_in_path      -mouse_urxvt       -tcl
-arabic            -find_in_path      +mouse_xterm       -termguicolors
+autocmd           +float             +multi_byte        -terminal
-autochdir         -folding           -multi_lang        +terminfo
-autoservername    -footer            -mzscheme          +termresponse
-balloon_eval      +fork()            -netbeans_intg     +textobjects
-balloon_eval_term -gettext           +num64             -textprop
-browse            -hangul_input      -packages          -timers
++builtin_terms    +iconv             +path_extra        +title
-byte_offset       +insert_expand     -perl              -toolbar
-channel           -ipv6              -persistent_undo   +user_commands
+cindent           -job               -popupwin          -vartabs
-clientserver      +jumplist          -printer           +vertsplit
-clipboard         -keymap            -profile           +vim9script
+cmdline_compl     -lambda            -python            -viminfo
+cmdline_hist      -langmap           -python3           +virtualedit
+cmdline_info      -libcall           -quickfix          +visual
+comments          -linebreak         -reltime           +visualextra
-conceal           +lispindent        -rightleft         +vreplace
-cryptv            +listcmds          -ruby              +wildignore
-cscope            +localmap          +scrollbind        +wildmenu
+cursorbind        -lua               -signs             +windows
-cursorshape       -menu              +smartindent       +writebackup
-dialog            -mksession         -sodium            -X11
-diff              +modify_fname      -sound             +xfontset
-digraphs          +mouse             -spell             -xim
-dnd               -mouseshape        -startuptime       -xpm
-ebcdic            -mouse_dec         -statusline        -xsmp
-emacs_tags        -mouse_gpm         -sun_workshop      -xterm_clipboard
-eval              -mouse_jsbterm     -syntax            -xterm_save
+ex_extra          -mouse_netterm     +tag_binary        
-extra_search      +mouse_sgr         -tag_old_static    
-farsi             -mouse_sysmouse    -tag_any_white     system vimrc file: "/etc/vim/vimrc"user vimrc file: "$HOME/.vimrc"2nd user vimrc file: "~/.vim/vimrc"user exrc file: "$HOME/.exrc"defaults file: "$VIMRUNTIME/defaults.vim"fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wdate-time -g -O2 -ffile-prefix-map=/build/vim-JA6Vy9/vim-9.0.1378=. -fstack-protector-strong -Wformat -Werror=format-security -DSYS_VIMRC_FILE=\"/etc/vim/vimrc\" -DSYS_GVIMRC_FILE=\"/etc/vim/gvimrc\" -DTINY_VIMRC -DSYS_TINYRC_FILE=\"/etc/vim/vimrc.tiny\" -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 
Linking: gcc -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lselinux -lacl -lattr 

可以看到debian12.4中用的VI就是VIM, 版本为 vim9.0-1499
去下载vim源码 https://github.com/vim/vim.git
迁出到本地, 切到9.0-1499版本
在这里插入图片描述

工程的编译

参考 INSTALLpc.txt

工程的编译 - 命令行vim

打开vs2019本地x64命令行
cd /d D:\3rd_prj\text_edtor\vim\src
nmake -f .\Make_mvc.mak

在这里插入图片描述
在这里插入图片描述

工程的编译 - GUI版vim

打开vs2019本地x64命令行
cd /d D:\3rd_prj\text_edtor\vim\src
nmake -f .\Make_mvc.mak GUI=yes

在这里插入图片描述
在这里插入图片描述

备注

看了vim的Make_mvc.mak的历史记录, 人家真是手写出来的.

现在VS2017, VS2019只支持CMake的模板工程, 已经不支持MakeFile(nmake)的工程向导模板了.
如果是老工程, 只能用nmake来编译Makefile.mk, 在源码工程中单步就成问题了.

如果有刚需, 可以自己按照Make_mvc.mak的包含关系, 构造一个VS的工程.
如果只是想玩一玩, 花这个时间就不值当了.

VIM的帮助文件位置

\vim\runtime\doc\ *.txt 都是帮助文件相关的.
进入vim中, 按F1 或者 :help 显示的都是 \vim\runtime\doc\ *.txt

vim各种快捷键, 看着头疼, 还是简单的用一下吧.

VIM官方教程

将 vim\vimtutor.bat 拷贝到 vim\src\vimtutor.bat
运行 vim\src\vimtutor.bat, 就出现教程
在这里插入图片描述
按照教程走, 30分钟就能初步使用vim.

这个教程挺好的, 就是看着教程走, 按照教程操作看到的教程文本, 很自然, 在使用中学习vim的使用.
这个教程的目的是让使用者将vim当作普通编辑器来用.

vim 常用快捷键

将教程中说的, 摘录一下. 觉得不适合自己现状的操作, 就不摘录了.

vi中的单词使用空格分开的, 对于中文连在一起, 是算一个单词的.
对于中文文档, 最好不要按照单词来操作. 删掉一个单词, 就等于删掉了一句话

启动vi时, 指定要编辑哪个文件

vi xx_file.txt

正常模式

不管处于任何模式, 只要按一下ESC键, 就回到了正常模式.
只有在正常模式下, 才可以输入命令来让vim干活.

光标的移动

hjkl 这4个键管着上下左右移动的光标移动, 不用死记, 如果移动方向不是自己想要的, 就这4个键, 自己试试就行, 直到可以将光标移动到自己想要的位置.

退出不保存

:q!

退出保存

:wq

只保存不退出

:w

另存到指定文件

:w file_save_to

移动到行首

0

移动到行尾

$

删除一个字符

x

删除单词

移动光标到单词的首字母, 然后按下 dw

删除到单词结尾

de

删除到行尾

d$

删除整行(剪切整行到剪贴板)

dd

在本行的下面一行粘贴

p

删除N行

Ndd

撤销(undo)

u

重做(redo)

CTRL + R

进入插入模式

i

替换一个字符

先输入r, 进入替换模式, 然后输入一个字符后, 替换了原来的字符, 自动进入正常模式

进入附加模式

a

从当前光标开始删除到单词尾部, 并进入编辑模式

ce
对于中文, 不存在单词这一说, ce就是将光标后的整句话都删除了.
如果不是以空格为分隔的内容, 不要用ce来操作.
如果是中文文章, 就用x就行, 一次就删除一个字符. 如果要删除多个字符, 就Nx

从当前光标开始删除到行尾, 并进入编辑模式

c$

显示当前行列位置

CTRL + G

跳到文件结尾

G

跳到指定行

NG

跳到文件开头

gg

查找时忽略大小写

如果不忽略大小写, 大概率查找时, 找不到东西.
因为我们只知道内容, 不知道内容的大小写. e.g. linux配置文件中的关键字

:set ic

查找(搜索)

:/xx_to_find
n 和 N 是查找下一个, 只是查找方向不同, 一般就用n来查找下一个就行

逆向查找

:?xx_to_find

在查找过程中导航

CTRL + O 回上一个呆过的地方.
CTRL + I 去下一个呆过的地方

匹配括号(大{},中[],小()括号就可以)

%

在VIM界面上, 执行外部命令

:! xx_cmd
e.g. :! dir

复制/粘贴

将光标落在想要复制的内容上.
按下v, 进入拷贝模式, 然后移动光标到想要拷贝的内容结束的地方, 按下y, 进行拷贝.
然后将光标落在想要粘贴的地方, 按下p, 进行粘贴.

显示行号

:set number

备注

VIM的操作命令, 远不止官方教程这么少.
不过官方教程这些操作, 已经让我很烦了.

最多就是用VI在linux下简单编辑一下配置文件, 如果没看官方教程这么多, 用起来不顺手.

END

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

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

相关文章

替代堆叠的新技术M-lag

M-lag:跨设备链路聚合组,是一种实现跨设备链路聚合的机制。将一台设备与另外两台设备进行跨设备链路聚合,从而把链路的可靠性从单板级提升到设备级,组成双活系统。 基本概念: peer-link链路:是一条聚合链…

[C#]winform部署官方yolov8-rtdetr目标检测的onnx模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 RTDETR,全称“Real-Time Detection with Transformer for Object Tracking and Detection”,是一种基于Transformer结构的实时目标检测和跟踪算法。它在目标检测和跟踪领域…

力扣刷MySQL-第五弹(详细讲解)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…

Java 面向对象02 封装 (黑马)

人画圆:画圆这个方法应该定义在园这个类里面。 人关门:是人给了门一个作用力,然后门自己关上了门,所以关门的方法是在门的类里面 封装对象的好处: 调用Java自带的方法举例实现: 在测试类中,对其…

电脑pdf如何转换成word格式?用它实现pdf文件一键转换

pdf转word格式可以用于提取和重用pdf文档中的内容,有时候,我们可能需要引用或引用pdf文档中的一些段落、表格或数据,通过将pdf转换为可编辑的Word文档,可以轻松地复制和粘贴所需内容,节省我们的时间,那么如…

Element-UI 多个el-upload组件自定义上传,不用上传url,并且携带自定义传参(文件序号)

1. 需求: 有多个(不确定具体数量)的upload组件,每个都需要单独上传获取文件(JS File类型),不需要action上传到指定url,自定义上传动作和http操作。而且因为不确定组件数量&#xff0…

Oracle 经典练习题 50 题

文章目录 一 CreateTable二 练习题1 查询"01"课程比"02"课程成绩高的学生的信息及课程分数2 查询"01"课程比"02"课程成绩低的学生的信息及课程分数3 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4 查询平均成绩小于…

力扣精选算法100题——串联所有单词的字串(滑动窗口专题)

本题链接——串联所有单词的字串 本题和找到字符串中所有字母异位词题目非常相似,思路都是一样。通过自己的大脑能发现其中的相似之处。 第一步:了解题意 就按实例来分析吧,这样更通俗易懂。 words["ab","cd","ef…

Pycharm Terminal 无法激活conda环境

1.问题 Failed to activate conda environment. Please open Anaconda prompt, and run conda init powershell there. 这导致我们无法在Pycharm中使用conda命令 2.解决办法 修改为第二个,然后重启Terminal 再打开时发现已经是当前的conda环境

大数据安全 | 期末复习(上)| 补档

文章目录 📚概述⭐️🐇大数据的定义、来源、特点🐇大数据安全的含义🐇大数据安全威胁🐇保障大数据安全🐇采集、存储、挖掘环节的安全技术🐇大数据用于安全🐇隐私的定义、属性、分类、…

免费三款备受推崇的爬虫软件

在信息爆炸的时代,爬虫软件成为了数据采集、信息挖掘的得力工具。为了解决用户对优秀爬虫软件的需求,本文将专心分享三款备受推崇的爬虫软件,其中特别突出推荐147采集软件,为您开启爬虫软件的奇妙世界。 一、爬虫软件的重要性 爬…

使用OpenCV绘制图形

使用OpenCV绘制图形 绘制黄色的线: # 绘制一个黑色的背景画布 canvas np.zeros((300, 300, 3), np.uint8) # 在画布上,绘制一条起点坐标为(150, 50)、终点坐标为(150, 250),黄色的,线条宽度为20的线段 canvas cv2.line(canvas,…

迭代器模式介绍

目录 一、迭代器模式介绍 1.1 迭代器模式定义 1.2 迭代器模式原理 1.2.1 迭代器模式类图 1.2.2 模式角色说明 1.2.3 示例代码 二、迭代模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 抽象迭代类 2.2.2 抽象集合类 2.2.3 主题类 2.2.4 具体迭代类 2.2.5 具体集合类 …

tcp/ip协议2实现的插图,数据结构7 (27 - 章)

(166) 166 二七1 TCP的函数 函tcp_drain,tcp_drop (167) (168)

Windows WSL2 占用磁盘空间清理释放

目前工作中时常用到WSL2(Ubuntu20.04),在使用一段时间后会发现WSL2所占用磁盘空间越来越多,体现在WSL2之上安装Linux分发对应的vhdx虚拟磁盘文件体积越来越大,会占用Windows自身空间,即使手动清理了Linux分…

GD32E230C8T6《调试篇》之 (软件) IIC通信(主机接收从机) + GN1650驱动芯片 + 按键 + 4位8段数码管显示 (成功)

GD32E230C8T6《调试篇》之 (软件) IIC通信 GN1650驱动芯片 4位8段数码管显示(成功) IIC是什么IIC简介1)IIC总线物理连接2)IIC时序协议 按键扫描代码1)DIG2短按只一次,长按超过1s 一…

若依微服务框架,富文本加入图片保存时出现JSON parse error: Unexpected character (‘/‘ (code 47)):...

若依微服务框架,富文本加入图片保存时出现JSON parse error: Unexpected character 一、问题二、解决1.修改网关配置2、对数据进行加密解密2.1安装插件2.2vue页面加密使用2.3后台解密存储 一、问题 若依微服务项目在使用富文本框的时候,富文本加入图片进…

【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(一):基础知识考察

关于MySQL部分的核心知识进行一网打尽,包括三部分:基础知识考察、核心机制策略、性能优化策略,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第一部分:基础知识考察,子节点表示追问或同级提问 基本概念 包括一些核心问…

ARMv8-AArch64 的异常处理模型详解之异常类型 Exception types

异常类型详解 Exception types 一, 什么是异常二,同步异常(synchronous exceptions)2.1 无效的指令和陷阱异常(Invalid instructions and trap exceptions)2.2 内存访问产生的异常2.3 产生异常的指令2.4 调…

基于JavaWeb+SSM+Vue智能社区服务小程序系统的设计和实现

基于JavaWebSSMVue智能社区服务小程序系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相…