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.hqwc.cn/news/418758.html

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

相关文章

list下

文章目录 注意:const迭代器怎么写?运用场合? inserterase析构函数赋值和拷贝构造区别?拷贝构造不能写那个swap,为什么?拷贝构造代码 面试问题什么是迭代器失效?vector、list的区别? 完整代码 注…

C++编译和链接

文章目录 编译预处理预处理做的事情包含头文件宏定义条件编译解决头文件重复包含问题方法一、#ifndef方法二、#pragma once 编译和链接源代码的组织编译链接更多细节 编译预处理 C程序编译的过程:预处理-》编译(优化、汇编)-》链接 预处理指…

PowerBI Copilot 零售数据分析自动化报告实战

读了三篇powerbi copilot的文章,想必大家对此都有了大致的了解: Copilot in Power BI等了好久终于等到今天 Copilot in Power BI详细使用说明 PowerBI Copilot已全面支持中文识别 有小伙伴提出如下问题: 老师这个是不是还得在powerbi des…

【linux】ps的基本使用

ps是linux中用于显示进程的工具,确切来说是显示活动进程的工具 ps的基本格式是 ps [选项] sh-3.2# ps --help ps: illegal option -- - usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]][-g grp[,grp...]] [-u [uid,uid...]][-p pid[,pid..…

python进程间通信——命名管道(Named Pipe、FIFO)

文章目录 Python中的命名管道:深入理解进程间通信1. 命名管道简介2. 创建和删除命名管道3. 写入命名管道4. 读取命名管道5. 示例:进程间通信write_to_pipe.pyread_from_pipe.py测试运行 6. 注意事项和限制命名管道的半双工机制命名管道读写任意一方未打开…

事件驱动架构

请求驱动 服务注册,服务发现,虽然调用地址隐藏了,但是调用stub必须相同。 rpc通信,远程调用。 生产者和消费者要有相同的stub存根。 消费者和生产者的调用接口是耦合的。 事件驱动 核心:上下游不进行通信 中间通过M…

Vue的生命周期方法

beforeCreate 在实例初始化之后,数据观测(data observe)和 event/watcher 事件配置之前被调用。在当前阶段 data、methods、computed 以及 watch 上的数据和方法都不能被访问。 created 实例已经创建完成之后被调用。在这一步,实…

32 登录页组件

效果演示 实现了一个登录页面的样式,包括一个容器、左侧和右侧部分。左侧部分是一个背景图片,右侧部分是一个表单,包括输入框、复选框、按钮和忘记密码链接。整个页面的背景色为白色,容器为一个圆角矩形,表单为一个半透…

OB OCP工具

文章目录 OCP产品架构OCP核心功能集群管理-集群拓扑图告警管理 OCP OCP(OceanBase Cloud Platform)是企业级数据库管理平台OceanBase 云平台(OceanBase Cloud Platform,OCP)是以 OceanBase 为核心的企业级数据库管理平…

回溯法:N皇后问题

问题背景 八皇后问题是十九世纪著名的数学家高斯于1850年提出的。 • 问题是:在88的棋盘上摆放八个皇后, 使其不能互相攻击, 即任意两个皇后都不能处于同一行、 同一列或同一斜线上。 • n皇后问题:即在n n的棋盘上摆放n个皇后…

第八回 柴进门招天下客 林冲棒打洪教头-Linux服务器管理软件宝塔面板介绍

花和尚鲁智深在野猪林救下了豹子头林冲,林冲宅心人厚,反而恳请鲁智深饶过薛霸与董超的性命。鲁智深劝不动林冲跟他一起逃走,只好一路护送至沧州附近才离开。 快到沧州时,林冲来到小旋风柴进府上,受到热情款待。柴进府…

利用HTML+CSS+JS打造炫酷时钟网页的完整指南

引言 在现代Web开发中,制作一个引人注目的时钟网页是一种常见而令人愉悦的体验。本文将介绍如何使用HTML、CSS和JavaScript来创建一个炫酷的时钟网页,通过这个项目,你将学到如何结合这三种前端技术,制作一个动态且美观的时钟效果…