Vim-从放弃到入门
vim --version
IM - Vi IMproved 8.1 (2018 May 18, 编译于 Oct 16 2023 18:14:13) ...
sudo pat-get install vim
sudo add-apt-repository ppa:jonathonf/vim
sudo apt update
sudo apt install vim
vim #方法一
vim filename #方法二,指定文件名,在启动vim同时,会打开该文件
:w #保存文件,用于在打开vim时指定了文件
:w+未被使用的文件名 #以指定的文件名保存当前vim内容
:q #对于没有改动的文件,用q即可退出 :wq #对于发生过修改的文件,保存并退出 :q! #对于发生过修改的文件,放弃修改并退出, !表示强制的意思 :qa #如果打开了多个窗口,全部退出
zz #将当前行置于页面中间 ctrl+u #向上翻页 Ctrl+f #向下翻页
假设文本为:<window>text="C++"</window> vit -> text="C++" 假设文本为:"Hello World!" vi" -> Hello World! 假设文本为:<Hello world> va< -> <Hello world>
h #光标左移
j #光标下移
k #光标上移
l #光标右移
w #移动光标到下一个单词的开头
b #移动光标到上一个单词的开头
e #移动光标到单词结尾,如果当前已经在结尾,则移动到下一个单词结尾处
W #移动光标到下一个以空白字符分隔的单词开头
B #移动光标到上一个以空白字符分隔的单词开头
E #移动光标到下一个以空白字符分隔的单词结尾
f+字符 #快速跳转至当前行中该字符位置 t+字符 #快速跳转至当前行中该字符前一个字符位置 F+字符 #反过来搜索 T+字符 #反过来搜索
数字0 #光标移动到行首 ^ #光标移动到行首第一个非空白字符 $ #光标移动到行尾 g_ #光标移动到行尾最后一个非空白字符 % #在成对的括号之间跳转
gg #跳转至文件开头位置(第一行) G #跳转至文件结尾位置(最后一行) 行号+gg #跳转至指定行号 H #跳转至当前页面开头行 M #跳转至当前页面的中间行 L #跳转至当前页面结尾行’‘ ''(两个单引号) #将光标退回上次所在位置
Ctrl+o #回退到上一个跳转 Ctrl+i #前进到下一个跳转 g; #等价于Ctrl+i g, #等价于Ctrl+o :ju #显示 Jump List 表
小写x #删除光标所在位置字符 大写X #删除光标前一个字符 数字+小写x #删除光标后指定个数的字符 数字+大写X #删除光标前指定个数的字符
小写s #删除光标所在位置字符,并进入插入模式 大写S #删除当前行所有字符,并进入插入模式 数字+小写s #删除光标往后指定个数字符,并进入插入模式 数字+大写S #向下删除指定数字行,并进入插入模式
r+单个字符 #将光标位置字符替换成指定字符 数字+r #进入替换模式,可以替换光标位置往后指定个数的字符 R #进入连续替换模式,可以替换多个字符,按Esc退出
选中文本+d #删除选中文本 大写D #s删除光标至本行结尾处所有字符 dd #删除当前行 数字+dd #向下删除指定数字行 d+移动命令 #删除移动范围内的文本 d+文本对象(w) #删除文本对象 daw #完整删除光标所在单词以及空白字符 diw #完整删除光标所在单词,不会删除空白字符 da+配对字符 #删除配对字符内文本,配对字符会被删除 di+配对字符 #删除配对字符内文本,配对字符不会被删除 dt+字符 #在当前行中,删除到指定字符之间的所有字符
dw与daw的区别:
假设需要删除 HelloWorld 字符串,光标处于 o 的位置 dw -> Hell daw ->
da与di的区别:
假设需要删除 "Hello World" 字符串,光标处于引号内部 da" -> di" -> ""
小写y #复制选中内容(需要配合视图模式使用) 大写Y #复制当前行 yy #复制当前行 数字+yy #向下复制多行 yiw #复制一个单词 yis #复制一个句子 yaw #复制一个单词(包括空格) yas #复制一个句子(包括空格) 小写p #将寄存器中的内容插入到光标之后(粘贴操作) 大写P #将寄存器中的内容插入到光标之前(粘贴操作)
小写u #撤销最后一次执行的操作
大写U #撤销整行修改
Ctrl+r #反撤销
i #在光标之前进入插入模式
a #在光标之后进行插入模式
I #在光标所在行行首进入插入模式
A #在光标所在行行尾进入插入模式
o #在光标所在行下边插入新行,将光标移动到新行行首并进入插入模式。
O #在光标所在行上边插入新行,将光标移动到新行行首并进入插入模式。
gi #回到上次退出插入模式的位置继续
Ctrl+u #删除当前行中光标前所有字符 Ctrl+h #删除光标前一个字符,与Backspace功能相同 Ctrl+w #删除光标前一个单词 Ctrl=[ #退出插入模式切换至普通模式
Ctrl+r+选项 #根据选项含义粘贴文本 #0:表示最近一次复制的文本 #":表示默认寄存器 #寄存器名:粘贴指定寄存器中的内容 #+:系统剪贴板 Ctrl+Shift+c #将光标选中内容拷贝至剪贴板 Ctrl+Shift+v #将剪贴板中的文本粘贴到光标位置
:set paste 粘贴文本 set nopaste
gg=G
v #进入视图模式,通过移动光标进行选择
V #进入视图模式并选中当前行
Ctrl+v #以矩形块方式选中文本
u #将选中的文本转换为小写
U #将选中的文本转换为大写
?+待查找字符串+回车 #在当前文件中反向查找该字符串 /+待查找字符串+回车 #在当前文件中正向查找该字符串 n #切换至下一个匹配字符串 N #切换至上一个匹配字符串 * #切换至下一个匹配字符串 # #切换至上一个匹配字符串
:[range] s/{pattern}/{string}/[flags]
:% s/C++/Java/g #将当前文件中所有"C++"字符替换为"Java" #% s/\<printf\>/printf_s/g #将当前文件中所有"printf"字符替换为"printf_s" #2,10 s/C++//n #统计2-10行中"C++"字符出现的次数
:e+文件路径 #打开指定文件(可以使用通配符,用于打开多个文件) :e! #强制重新加载当前文件,丢弃对文件所做的所有更改。 e+文件路径+n #打开指定文件并定位到第 n 行 e+文件路径+/pattern #打开指定文件并进行查找
:ls 1 "a.txt" 第 3 行 2 # "b.txt" 第 2 行 3 %a "c.txt" 第 2 行 #第一列表示文件编号,可以使用 :b+编号 切换至不同文件。 #第二列表示缓冲区中的状态,%a表示当前正在编辑的文件,#表示上一个文件 #第三列表示文件名 #第四列表示光标所处行
:b+n #跳转至第n个文件
:bpre #根据当前文件编号,跳转至上一个文件
:bnext #根据当前文件编号,跳转至下一个文件
:bfirst #根据当前文件编号,跳转至第一个文件
:blast #根据当前文件编号,跳转至最后一个文件
:b+文件名 #根据文件名跳转
Ctrl+w+s #水平分割 :sp #水平分割 Ctrl+w+v #垂直分割 :vs #垂直分割
Ctrl+w+w #在窗口之间循环切换 Ctrl+w+h #切换至左边窗口 Ctrl+w+j #在窗口之间循环切换 Ctrl+w+k #在窗口之间循环切换 Ctrl+w+l #在窗口之间循环切换
Ctrl+w+= #所有窗口等高等宽 Ctrl+w+_ #最大化活动窗口的高度 Ctrl+w+| #最大化活动窗口的宽度 数字+Ctrl+w+_ #把活动窗口 数字+Ctrl+w+| #所有窗口等高等宽
:! ls-l
:w !sudo tee %
"ayy #复制当前行到a寄存器 "aiw #复制一个单词到a寄存器 "bdd #剪切当前行剪切到b寄存器 "ap #将a寄存器粘贴到当前行 "%p #将文件名输出当前行
"" #表示无名寄存器 "0 #复制寄存器 "+ #表示系统剪贴板(需要vim支持clipboard) "% #当前文件名 ". #上次插入的文本
:r! echo % #插入当前文件名 :r! echo %:p #插入当前路径 :r 文件名 #将指定文件中的内容插入至光标后 :r !外部命令 #将外部命令的输出结果插入至光标后
https://www.bilibili.com/ https://www.baidu.com/ https://www.sina.com.cn/ https://www.qq.com/ https://www.1688.com/
光标定位到第一行 普通模式下输入: qa 此时左下角显示recording @a 按下大写I移动到行首并进入插入模式,输入:" 按下ESC退出插入模式,按下大写A移动到行尾并进入插入模式,输入:" 按下ESC退出插入模式,按下q退出录制 视图模式下选中2-5行 按下: 此时末行模式变为::'<,'> 输入: normal @a 按下回车,应用宏。
光标定位到第一行,按下大写A,选中整行 按下大写G,选中全部文本 按下: 此时末行模式变为: :'<,'> 输入: normal I" 执行1、2步再次选中全文 按下: 此时末行模式变为: :'<,'> ,按下 ctrl+p,打开上一次执行的命令 将 normal I" 替换为 normal A" ,回车
Ctrl+n #普通关键字补全,向后选择item项 Ctrl+p #普通关键字补全,向前选择item项 Ctrl+x+n #当前缓冲区关键字 Ctrl+x+i #包含文件关键字 Ctrl+x+] #标签文件关键字 Ctrl+x+k #字典查找 Ctrl+x+l #整行补全 Ctrl+x+f #文件名补全,在使用open指定文件路径时使用 Ctrl+x+o #全能补全
:colorscheme #显示当前的主题配色,默认是default :colorscheme Ctrl+d #显示所有的配色方案 :colorscheme 配色名 #更换配色
https://vimcolorschemes.com/
git clone https://github.com/morhetz/gruvbox.git #确保当前用户目录下存在colors目录 mkdir -p ~/.vim/colors #将.vim文件拷贝到colors目录下 cp /gruvbox-master/colors/gruvbox.vim ~/.vim/colors/ #在vim中开启配色 :colorscheme gruvbox
/etc/vim/vimrc #全局配置,所有用户都会生效
~/.vimrc #仅作用于该用户
:source ~/.vimrc
#命令 #语义 #缩写 set number 代码显示行号 set nu set nonumber 关闭行号 set nonu syntax on 关键词高亮显示 set cindent c 语法自动缩进 set ci set autoindent 新行自动缩进 set ai set shiftwidth=4 缩进宽度 4 set sw=4 set tabstop=4 tab 键宽度 4 set ts=4 set softtabstop=4 制表符宽度 4 set st=4
nnoremap {keys} {command} #创建不递归的 normal 模式映射
nmap {keys} {command} #创建递归的 normal 模式映射
nnoremap <F2> :w<CR> #将 F2 键映射到保存文件的命令。
nmap <F3> dd #将 F3 键映射到删除当前行的命令。
vnoremap {keys} {command} #创建不递归的 visual 模式映射
vmap {keys} {command} #创建递归的 visual 模式映射
vnoremap <C-c> "+y #将 Ctrl + c 键映射到复制选定文本到剪贴板(需要clipboard支持)
inoremap {keys} {command} #创建不递归的 insert 模式映射
imap {keys} {command} #创建递归的 insert 模式映射
inoremap jj <Esc>`^ #按下jj切换至 normal 模式且不改变光标位置
cnoremap {keys} {command} #创建不递归的 command-line 模式映射
cmap {keys} {command} #创建递归的 command-line 模式映射
cnoremap w!! w !sudo tee % >/dev/null 强制写入
$ ls -R vim-unimpaired/ vim-unimpaired/: doc plugin README.markdown vim-unimpaired/doc: tags unimpaired.txt vim-unimpaired/plugin: unimpaired.vim
~/.vim/pack/
mkdir -p ~/.vim/pack/bundle/start #确保目录存在 cd ~/.vim/pack/bundle/start git clone https://github.com/tpope/vim-unimpaired.git
echo join(split(&runtimepath,','),"\n")
... /home/test/.vim/pack/bundle/start/vim-unimpaired ...
[on #开启显示行号
]on #关闭显示行号
:help unimpaired
E149: sorry, no help for unimpaired
:helptags ALL
mkdir -p ~/.vim/pack/bundle/opt cd ~/.vim/pack/bundle/opt git clone https://github.com/tpope/vim-scriptease.git
:packadd vim-scriptease
:scriptnames #验证是否安装成功
cd ~/.vim/pack/bundle/start/vim-unimpaired
git pull
rm -rf ~/.vim/pack/bundle/start/vim-unimpaired
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
mkdir -p ~/.vim/autoload/
cp plug.vim ~/.vim/autoload/plug.vim #需要根据当前路径调整plug.vim
call plug#begin('~/.vim/autoload') Plug 'mhinz/vim-startify' #vim-startify插件 call plug#end()
:source ~/.vimrc #应用配置项
:PlugInstall #安装插件
:PlugClean
版权
本文主要参考 《玩转Vim 从放弃到爱不释手》(感谢作者无私录制免费视频)。文章由本人学习后整理而成。