vi & vim 使用教程从入门到精通 All In One
vi & vim 使用教程从入门到精通 All In One
$ man vim
$ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Oct 01 2021 01:51:08)
包含补丁: 1-2434
Extra patches: 8.2.3402, 8.2.3403, 8.2.3409, 8.2.3428
修改者 team+vim@tracker.debian.org
编译者 team+vim@tracker.debian.org
巨型版本 无图形界面。 可使用(+)与不可使用(-)的功能:
+acl -farsi +mouse_sgr +tag_binary
+arabic +file_in_path -mouse_sysmouse -tag_old_static
+autocmd +find_in_path +mouse_urxvt -tag_any_white
+autochdir +float +mouse_xterm -tcl
-autoservername +folding +multi_byte +termguicolors
-balloon_eval -footer +multi_lang +terminal
+balloon_eval_term +fork() -mzscheme +terminfo
-browse +gettext +netbeans_intg +termresponse
++builtin_terms -hangul_input +num64 +textobjects
+byte_offset +iconv +packages +textprop
+channel +insert_expand +path_extra +timers
+cindent +ipv6 -perl +title
-clientserver +job +persistent_undo -toolbar
-clipboard +jumplist +popupwin +user_commands
+cmdline_compl +keymap +postscript +vartabs
+cmdline_hist +lambda +printer +vertsplit
+cmdline_info +langmap +profile +virtualedit
+comments +libcall -python +visual
+conceal +linebreak -python3 +visualextra
+cryptv +lispindent +quickfix +viminfo
+cscope +listcmds +reltime +vreplace
+cursorbind +localmap +rightleft +wildignore
+cursorshape -lua -ruby +wildmenu
+dialog_con +menu +scrollbind +windows
+diff +mksession +signs +writebackup
+digraphs +modify_fname +smartindent -X11
-dnd +mouse -sound -xfontset
-ebcdic -mouseshape +spell -xim
+emacs_tags +mouse_dec +startuptime -xpm
+eval +mouse_gpm +statusline -xsmp
+ex_extra -mouse_jsbterm -sun_workshop -xterm_clipboard
+extra_search +mouse_netterm +syntax -xterm_save
系统 vimrc 文件: "$VIM/vimrc"
用户 vimrc 文件: "$HOME/.vimrc"
第二用户 vimrc 文件: "~/.vim/vimrc"
用户 exrc 文件: "$HOME/.exrc"
defaults file: "$VIMRUNTIME/defaults.vim"
$VIM 预设值: "/usr/share/vim"
编译方式: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wdate-time -g -O2 -ffile-prefix-map=/build/vim-I0JMpS/vim-8.2.2434=. -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
链接方式: gcc -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lm -ltinfo -lselinux -lacl -lattr -lgpm -ldl
# VIM 操作记录
$ vim ~/.viminfo
# VIM 配置文件
$ vim ~/.vimrc
VIM 模式
# ESC
:h vim-modes-intro
:h vim-mode
- 基本模式
正常
模式/普通模式(默认模式)
可视化
模式
v
选择
模式
插入
模式
i
o
命令
模式/命令行
模式
:q
:q!
:wq
:wq!
:version
退出
模式
ESC
Terminal 工作
模式
- 扩展模式
操作挂起
模式
替换
模式
可视化替换
模式
插入正常
模式
插入可视化
模式
插入选择
模式
Terminal 可视化
模式
VIM 复制
yy
VIM 粘贴
p
VIM 删除
dd
VIM 高级设置
- 语法高亮
- 自动缩进
- 快捷键
- 自动补全
- 全局搜索替换
...
Linux shell commands / shell script
cd
ls
cd ../
cd -
pwd
cp
rm
mkdir
tar
mv
mb
tar -zcf
chmod
ssh
top
q
free
数字0含空字符到行首,^不含空字符到行首。
G移到到整个页面的最后一行的第一个非空字符。
gg移到整个页面的第一行的第一个非空字符。
w和e一般对英文作用比较好,并且大写的W E会忽略标点符号。
数字+| 移动光标所在行的第N个字符,一个汉字代表2个字符。
数字+G 移动到第N行,第一个非空字符。
{}移动到上一个或下一个段落,以空白行为划分。
()移动到上一个或下一个句子,以英文的?!等为划分,不常用。
%用来匹配括号的另一半,但只支持英文的括号。
CTRL+O 临时进入插入常态模式,即正在插入时,突然需要输入一条命令,命令执行后又回到插入模式。
J 连接此行与下一行。
A 与 I 及 a与 i,大写I在行首插入文字,大写A在行尾插入文字。
大写的O在上面插入一行,小写的O在下面插入一行。
大写X删除光标前的字符。
d0 d等同于D
dG 删除至文章的尾部,如定位光标在第5行,则删除第5行及其后的所有内容。
d1G 删除光标所在行,及其前面的所有内容。等同于dgg
大写R进入替换模式,可以从光标处一直改到按ESC.小写替换一个字符。
大写C等同于c$替换至行尾,但输入后直接进入插入模式。
cc取代整行,也可以用大写的S。
cw只适用于英文,替换一个单字。
~ 替换大小写
s与r类似,但会直接删除字符进入插入模式。数字+大写G 光标移动到第N行
例子:5r我 把光标所在后的4个加上光标处1个字符共5个替换为 我。
3i我 ,在光标前插入3个我,但是要按esc后才出现效果。
3dd 删除光标以下含光标处共3行。
3x删除3个字符。
这些命令最好都是把 数字放在前面。shiftwidth 缩写 sw 可能通过 :set sw=4 让
>> 命令使整行向右移动4个字,有汉字的缩进效果哦,合令刚好相反。
textwidth 缩写为tw ,可以:set td=100,也就是每行有100个字符,它对排版,文字居中,居左,居右有作用。
:ce :ri :legq为重排命令,可将段落或行重新排成一块。
gqap为整段重排。gq+数字+q ,可以重排几行。
非整行复制时,若粘贴,则在行或段尾加入。整行时,P(大写)表示之上一行,小写p为在下一行粘贴。
yG复制到档尾,y1G复制到档首。y0 y$ 2yy 复制2行,y2w 复制两个字符(汉字也是复制两个)"a 这个就表示缓冲区a ,小写时在缓冲区a 中写内容,大写时,在原有缓冲区内容的基础上增加内容。 如 "ayy 就是复制一行放到缓冲区a中。
英文.(句号)表示重做,如删除一行后,再用6. 表示再向上重新删除6行。
/搜索,向下 ?搜索向上。 *匹配光标处的文字,搜索向下。g*部分匹配光标处文字,向下。#向上与*反,g#向上与g*反。n继续寻找,N反向继续寻找。
替换 :范围 /被替换的内容/ 换成什么/ 选项 c confirm 每次替换都询问,e error 显示错误信息 g globe 整行替换(否则只替换每行的第一外)i ignore 忽略大小写。如
:1,效果一样。小写s代表替换。mx来标记书签,x为书签位置,可以用26个小写字母来表示,当按下`x 回到标签所在位置,'x 回到标签所在行的行首。 ` 是TAB键上方的那个,后一个'为单引号。如果设置和引用书签时用大写,如`A,则可以在不同的文件之间切换,牛B啊!
阿拉伯数字的书签目录是系统自己记的,`0代表回到前一次编辑文件中离开时的最后位置 `1代表回到前两次编辑文件中离开时的最后位置 ,含0可以记10个文件。无论是何时,达到mark处,想回到原来的位置(文件),可使用ctrl+o.
:marks 获取当前的书签列表。打开文档,若是gvim就用 :gvim+文件名,若是vim就用 :vim +文件名
*跳到与光标处一样的单词。
%匹配括号等。
w 下一个单词的词头,e 下一个单词的词尾。小写e,w 以空格划分单词,大写真正的区分单词。
^ 跳到本行的第一个非空,而0含有空哦。
g_跳到本行的第一个非空,而
:set nolist 也就是nooption 可以取消设置。
swapfile[swf]是否需swap至磁碟。
:history[hi]记录所用过的:后的命令频数,默认为20步。
在.vimrc文件里 "是注释的标志,其后内容不起作用。
* 指前所綁住的字元或字元集合,出現 0 次或 0 次以上。
\+ 和 * 作用相同,但不包括出現 0 次。
\= 指前所綁住的字元恰好出現 0 或 1 次。
\| 這是多選,就是 or 的意思,被 \| 隔開的 pattern,任一個符合的話就算符合。
以下是中括号的用法,表示一个范围。
[...] 字元集合,表示中括號中所有字元中的其中一個。
[?..] 這是上述 [. . . ] 的補集,表非中括號內字元的其中一個。
. 除換行字元外的任一單一字元。
? 匹配行首,指其後綁住的字串,出現在行首才符合。
/d 删除空白行的意思。
:%s/^\d\d\d\d\d\d\d\d\d\>/ID:&/g 其中&代表要搜索的符合条件的内容。
\U 在 pattern 的位置的時候是指非大寫字
母的樣式,即 [?A–Z],但如果是在置換字串位置的時候是指將其後的字串通通改成大寫。
折叠:可以在可视模式下,选中行或块,然后用zf来折叠
demos
refs
https://github.com/xgqfrms/linux-shell-script-programming/issues/6
https://www.lanqiao.cn/courses/2/learning/?id=16
https://www.imooc.com/learn/1049
https://www.imooc.com/learn/1129
©xgqfrms 2012-2025
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/4845252.html
未经授权禁止转载,违者必究!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)