装了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 [email protected]
Compiled by [email protected]
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
打开vs2019本地x64命令行
cd /d D:\3rd_prj\text_edtor\vim\src
nmake -f .\Make_mvc.mak
打开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\runtime\doc\ *.txt 都是帮助文件相关的.
进入vim中, 按F1 或者 :help 显示的都是 \vim\runtime\doc\ *.txt
vim各种快捷键, 看着头疼, 还是简单的用一下吧.
将 vim\vimtutor.bat 拷贝到 vim\src\vimtutor.bat
运行 vim\src\vimtutor.bat, 就出现教程
按照教程走, 30分钟就能初步使用vim.
这个教程挺好的, 就是看着教程走, 按照教程操作看到的教程文本, 很自然, 在使用中学习vim的使用.
这个教程的目的是让使用者将vim当作普通编辑器来用.
将教程中说的, 摘录一下. 觉得不适合自己现状的操作, 就不摘录了.
vi中的单词使用空格分开的, 对于中文连在一起, 是算一个单词的.
对于中文文档, 最好不要按照单词来操作. 删掉一个单词, 就等于删掉了一句话
vi xx_file.txt
不管处于任何模式, 只要按一下ESC键, 就回到了正常模式.
只有在正常模式下, 才可以输入命令来让vim干活.
hjkl 这4个键管着上下左右移动的光标移动, 不用死记, 如果移动方向不是自己想要的, 就这4个键, 自己试试就行, 直到可以将光标移动到自己想要的位置.
:q!
:wq
:w
:w file_save_to
0
$
x
移动光标到单词的首字母, 然后按下 dw
de
d$
dd
p
Ndd
u
CTRL + R
i
先输入r, 进入替换模式, 然后输入一个字符后, 替换了原来的字符, 自动进入正常模式
a
ce
对于中文, 不存在单词这一说, ce就是将光标后的整句话都删除了.
如果不是以空格为分隔的内容, 不要用ce来操作.
如果是中文文章, 就用x就行, 一次就删除一个字符. 如果要删除多个字符, 就Nx
c$
CTRL + G
G
NG
gg
:/xx_to_find
n 和 N 是查找下一个, 只是查找方向不同, 一般就用n来查找下一个就行
:?xx_to_find
CTRL + O 回上一个呆过的地方.
CTRL + I 去下一个呆过的地方
%
:! xx_cmd
e.g. :! dir
将光标落在想要复制的内容上.
按下v, 进入拷贝模式, 然后移动光标到想要拷贝的内容结束的地方, 按下y, 进行拷贝.
然后将光标落在想要粘贴的地方, 按下p, 进行粘贴.
:set number
VIM的操作命令, 远不止官方教程这么少.
不过官方教程这些操作, 已经让我很烦了.
最多就是用VI在linux下简单编辑一下配置文件, 如果没看官方教程这么多, 用起来不顺手.