xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

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

https://github.com/vim/vim

VIM 模式

# ESC
:h vim-modes-intro
:h vim-mode
  1. 基本模式

正常模式/普通模式(默认模式)

可视化模式
v

选择模式

插入模式
i
o

命令模式/命令行模式
:q
:q!
:wq
:wq!
:version

image

退出模式
ESC

Terminal 工作模式

image
image

  1. 扩展模式

操作挂起模式
替换模式
可视化替换模式
插入正常模式
插入可视化模式
插入选择模式
Terminal 可视化模式

image

image

VIM 复制

yy

VIM 粘贴

p

VIM 删除

dd

VIM 高级设置

  1. 语法高亮
  2. 自动缩进
  3. 快捷键
  4. 自动补全
  5. 全局搜索替换
    ...

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$等同于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 :le

gq为重排命令,可将段落或行重新排成一块。
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/lookfor/xfuture/g 替换第一行至最后一行中的lookfor为xfuture,是每一行中的每一个lookfor。
因为%可以代表当前文档,所以%与 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_跳到本行的第一个非空,而$含有空哦。
fa 跳到当前行的a字母出现的下一个位置,f很好用哦。
3fa→ 在这行中查找a出现的第三个位置.
f和t对应t为向前查。这样就推导出一个命令  dfa删除从当前光标到下一个字母a。
:e#等同于ctrl+^可以让两个打开的文件相互切换。
多文件切换编辑时的一个主要区别:如果是一次打开多个文件,叫argument list ,如果是在编辑一个文件时,又打开了其它的文件,这时这些文件叫做:bufferlist.

而多个文件切换时的命令:  :n  :N 后一个,前一个文档,只适用于argument list.
:bn :bp 则适用于 bufferlist. :bl 编辑 bufferlist中的最后一个文件。
:b+文件名或编号,可以打开对应的文件。:ls可以显示文件的列表,看到编号和文件名。
在列表符号中:#代表前一次编辑的档案,%代表当前编辑的档案。+表示该文件已经修改过,-号表示bufferlist 中的文件尚未载入。

:e!放弃一切修改,重新载入这个文件,就像刚打开时那样。
:f 或 ctrl+g 会显示当前文件的名称,是否修改过,以及当前光标的位置。
:f +文件名,可以重命名当前文件。

:q! 舍弃修改,强制退出
:x 等同于 ZZ  存档后离开 ,注意区别若无修改则直接关闭,而:wq 即使无修改,退出直前也会再写入一次。
:w + 档名,另存他档,保存另一个文件。
:qa! 强迫中止当前正在进行的动作,而去执行下达的命令。
:set noswf 关掉VIM自动保存的那个紧急回复的文件。.文件名.swp 一般是隐藏的,并且没有密码功能。
:X 大写X会提示输入密码,给文件加密。
:recover +档名 紧急恢复。


:r + 文件名,可以在光标位置插入 这个文件的内容,好强大,有木有。
:35r + 文件名,将文件插入到第36行之后。
标示指令:有三种模式,字符,行,块。分别使用小字v 大写V ,CTRL+v(小写) windows下ctrl+v 是粘贴键,所以用ctrl+q 来进入其中。
可视化块会以列来标示选中,还记得列表只要标题吗,这样就很好用呢!在这个模式下,选中内容后,可以用shift+> 来将内容右移一个TAB位置。相反的符号则相反。
ctrl+w n(是字母,不是数字,可以将视窗上下一分为二),ctrl+w s 将原视窗一分为二,但第二个里的内容仍是第一个里的,即复制一个视窗。ctrl+w q 关闭视窗。
ctrl+w j   ctrl+w k 移至下一个或上一个视窗。
:sp + 文件名,可以新开一个视窗来编辑文件或新建 一个文件来编辑。
Ctrl+w o 使当前视窗成为唯一编辑的视窗,其它的隐藏掉。
@: 這是 Vim 的一個很特殊的指令,可以重複前一次的冒號命令。
:sh(ell) 執行 shell。使用 exit 回到 vim。
按下:后,可以使用上下左右键来找寻之前用过的:命令。
大寫 K 會顯示游標所在處之 word 的 man page 系統線上使用手冊。
:r !commond 這個就妙了!會在游標所在處次一行插入外部指令 commond 執行後的輸出內容。例如 :r !date 就會插入日期時間。
      :h name 這樣就會叫出 name 這個說明檔,如果後面沒接 name, 則會叫出 help.txt
:ver 會顯示版本

几 个配置:autoindent[ai]   autowrite[aw] background[bg] backup[bk] writebackup[wb] backupdir[bdir]  browsedir[bsdir]就是菜单项 文件/打开 会弹出的文件浏览选择窗口。cindent[cin] 更适合C语言的缩进。
cmdheight[ch]状态栏的行数,建议设为2行。
compatible[cp]设为和VI兼容,但这样的话 VIM的扩展功能会受抑制。默认为OFF.
 confirm[cf]各种确认动作,预设为OFF.
directory[dir]swap档存放的目录。
ignorecase[ic]寻找时不分大小写,会对中文造成困扰。预设为off.
incsearch[is]加强式搜索,在输入patern时就在文件内移对光标找对应的patern.
hlsearch[hls]符合字串时,会反白表示,预设为OFF.
textwidth[tw]一种折行功能,规定了可以一行有多宽,以放多少字节为单位。
wrapmargin[wm]与tw类似,只是宽度是从视窗右边向左边算起。
wrap假折行,只在屏幕显示,并未插入eof.
wrapscan[ws]预设已开,就是在搜索时若到尾部了,可以从头开始再找。循环。
ruler[ru]在屏幕右下角显示,游标在文档中的位置,如底部,顶部或百分比。
statusline 修改状态列显示的格式。 shiftwidth[sw]设定〉〉移动的多少,可以用作缩进也行。
tabstop[ts]预设为8个字符的宽,为一个tab键的宽度。
showcmd[sc]在状态列显示目前所执行的指令及未未完成的指令片段。
showmde[smd]显示当前的模式,在载入文件时,会在这个地方显示文件名及其总行数,总字数。
visualbell 以屏幕闪动代替beep声。
list 也是一种模式,这样会让TAB的地方以^I的显示,行尾以的EOL显示成$
:set nolist 也就是nooption 可以取消设置。
swapfile[swf]是否需swap至磁碟。
:history[hi]记录所用过的:后的命令频数,默认为20步。
在.vimrc文件里 "是注释的标志,其后内容不起作用。
* 指前所綁住的字元或字元集合,出現 0 次或 0 次以上。
\+ 和 * 作用相同,但不包括出現 0 次。
\= 指前所綁住的字元恰好出現 0 或 1 次。
\| 這是多選,就是 or 的意思,被 \| 隔開的 pattern,任一個符合的話就算符合。
以下是中括号的用法,表示一个范围。
[...] 字元集合,表示中括號中所有字元中的其中一個。
[?..] 這是上述 [. . . ] 的補集,表非中括號內字元的其中一個。
. 除換行字元外的任一單一字元。
? 匹配行首,指其後綁住的字串,出現在行首才符合。
$ 匹配行尾,指其前綁住的字串,出現在行尾才符合。含換行字元。
\< 匹配字(word)首。所謂 word 包括文數字及底線。
\> 匹配字尾。這就是前所提及的限定用法
\{n,m} 指前所綁住的字元或字元集合最少出現 n 次,最多出現 m 次。n就是最小值, m是最大值。{}中若只有一个数字,则表示出现这个限定的次数。
中介字元,用来简化正则表达式的写法,如下:
\s 表空白字元,即 Space 或 Tab。
\S 表非空白字元。
\d 表數目字(digits),即 [0–9]。
\D 表非數目字,即 [^0–9]。
\w 表一般字元(word character),包括底線。即 [0–9a–zA–Z_]。
\W 表非一般字元,即 [^0–9a–zA–Z_]。
\a 表英文字母(alphabetic character),即 [a–zA–Z]。
\A 表非英文字母,即 [^a–zA–Z]。
\l 表小寫字母(lowercase character),即 [a–z]。
\L 表非小寫字母,即 [^a–z]。
\u 表大寫字母(uppercase),即 [A–Z]。
\U 表非大寫字母,即 [^A–Z]。
:g/^\s*$/d  删除空白行的意思。
:%s/^\d\d\d\d\d\d\d\d\d\>/ID:&/g  其中&代表要搜索的符合条件的内容。
\U 在 pattern 的位置的時候是指非大寫字
母的樣式,即 [?A–Z],但如果是在置換字串位置的時候是指將其後的字串通通改成大寫。
折叠:可以在可视模式下,选中行或块,然后用zf来折叠

demos

(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!

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-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


posted @ 2015-09-28 23:16  xgqfrms  阅读(90)  评论(8编辑  收藏  举报