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的操作命令, 远不止官方教程这么少.
不过官方教程这些操作, 已经让我很烦了.文章来源:https://www.toymoban.com/news/detail-822257.html
最多就是用VI在linux下简单编辑一下配置文件, 如果没看官方教程这么多, 用起来不顺手.文章来源地址https://www.toymoban.com/news/detail-822257.html
END
到了这里,关于VIM工程的编译 / VI的快捷键记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!