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环境来单步, 看着也不方便(最主要的是, 如果不能单步调试, 逻辑是看不出来的).
VIM工程的编译 / VI的快捷键记录_第1张图片

认怂了, 还是得看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版本
VIM工程的编译 / VI的快捷键记录_第2张图片

工程的编译

参考 INSTALLpc.txt

工程的编译 - 命令行vim

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

VIM工程的编译 / VI的快捷键记录_第3张图片
VIM工程的编译 / VI的快捷键记录_第4张图片

工程的编译 - GUI版vim

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

VIM工程的编译 / VI的快捷键记录_第5张图片
VIM工程的编译 / VI的快捷键记录_第6张图片

备注

看了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, 就出现教程
VIM工程的编译 / VI的快捷键记录_第7张图片
按照教程走, 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

查找(搜索)

:/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

你可能感兴趣的:(vi,计算机维护,linux,vi)