VIM工程的編譯 / VI的快捷鍵記錄
概述
裝了debain12.4, 用VI的時候, 只是簡單的用. 感覺不順手.
去查VI的快捷鍵, 不同資料雖然說的大概相同,但是細節(jié)說的不一樣.
就想去看看對應的源碼, 看看代碼里面怎么說, 畢竟代碼是不會騙人的.
沒有一個集成環(huán)境, 不好看代碼. 好多main(), 不知道看哪個…
用IDA看, 是從VimMain()開始的. 由于沒有一個舒服的IDE環(huán)境來單步, 看著也不方便(最主要的是, 如果不能單步調試, 邏輯是看不出來的).
認慫了, 還是得看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的歷史記錄, 人家真是手寫出來的.
現(xiàn)在VS2017, VS2019只支持CMake的模板工程, 已經(jīng)不支持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, 就出現(xiàn)教程
按照教程走, 30分鐘就能初步使用vim.
這個教程挺好的, 就是看著教程走, 按照教程操作看到的教程文本, 很自然, 在使用中學習vim的使用.
這個教程的目的是讓使用者將vim當作普通編輯器來用.
vim 常用快捷鍵
將教程中說的, 摘錄一下. 覺得不適合自己現(xiàn)狀的操作, 就不摘錄了.
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界面上, 執(zhí)行外部命令
:! xx_cmd
e.g. :! dir
復制/粘貼
將光標落在想要復制的內容上.
按下v, 進入拷貝模式, 然后移動光標到想要拷貝的內容結束的地方, 按下y, 進行拷貝.
然后將光標落在想要粘貼的地方, 按下p, 進行粘貼.
顯示行號
:set number
備注
VIM的操作命令, 遠不止官方教程這么少.
不過官方教程這些操作, 已經(jīng)讓我很煩了.文章來源:http://www.zghlxwxcb.cn/news/detail-822257.html
最多就是用VI在linux下簡單編輯一下配置文件, 如果沒看官方教程這么多, 用起來不順手.文章來源地址http://www.zghlxwxcb.cn/news/detail-822257.html
END
到了這里,關于VIM工程的編譯 / VI的快捷鍵記錄的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!