一、vim几种模式:
normal模式:进入vim不能编辑或者少按esc的不能编辑的模式;
编辑模式:通过insert(插入)、append(追加)或者少新建一行o等等可以编辑内容模式;
命令模式:类似退出 :wq这种模式;
可视化模式:visual模式;(Visual模式一般用来块状选择文本)类似于我们的shift+方向键选择;
Normal模式下使用v进入visual选择
使用V选择行
使用ctrl+v进行方块选择
二、编辑写入相关:
1、编辑写入相关操作:
1)插入、追加、新建
小写
i---->insert(插入)a---->append(追加)o---->NEW a line below(当前光标新建下一行添加)
大写
I---->insert before line(在一行的开始第一个字符插入)
A---->append after line(在一行的最后一个字符追加)
O---->NEW a line above(当前光标新建上一行添加)
2)编辑的一些相关操作:
纠错操作(这个同时也适用shell终端)
ctrl+h删除上一个字符ctrl+w删除上一个单词ctrl+u删除当前行
终端shell一些好的操作:
ctrl+a移动到行首ctrl+e移动到行末尾ctrl+b向前移动ctrl+f向后移动
2、保存退出相关操作
1)保存退出
先按esc:wq---->(wirte&quit)shift+ZZ---->(wirte&quit)
2)退出
先按esc:q---->(quit)
3)强制退出
先按esc:q!---->(强制quit)
三、快捷操作:
1、设置行号:
命令模式::setnu
2、分屏操作:
命令模式::vs---->横向分屏(vertical split):vp---->纵向分屏(split)想要退出对应的模式::q
3、全局替换:
命令模式::%s/java/c++/g---->全局替换(%全部字符、s替换、将Java替换c++、g全局)
4、快速切换insert和normal模式:
insert切换normal模式---->使用ctrl+c代替Esc (但是可能会中断某些插件)或者ctrl+[normal切换insert模式---->gi快速跳转到你最后一次编辑的地方并进入插入模式
5、vim移动快捷键:
普通的移动:左(h) ,下(j) , 上(k) ,右(l) ,移动也不会让手指脱离主键盘区
6、在单词之间移动:
w/W移到下一个word/WORD开头。e/E 下一个word/WORD尾;b/B回到上一个word/WORD开头,可以理解为backword;word指的是以非空白符分割的单词,WORD以空白符分割的单词;
7、行间搜索快速移动:
使用f{char}可以移动到char字符上, t移动到char的前一个字符如果第一次没搜到 ,可以用分号(;)/逗号(,)继续搜该行下一个/上一个大写的F表示反过来搜前面的字符
8、Vim水平移动
0移动到行首第一一个字符, ^移动到第一个非空白字符$移动到行尾,g_移动到行尾非空白字符记住常用的0和$就可以满足日常需求了
9、Vim页面移动
翻页命令太多, 2/8定律,记住常见的就能满足需求gg/G移动到文件开头和结尾,你可以使用ctrl+o快速返回H/M/L跳转到屏幕的开头(Head) ,中间(Middle)和结尾(Lower)Ctrl+u. ctrl+f..上下翻页. (upword/forward)。zz 把屏幕置为中间
10、Vim快速删除:
Vim在normal模式下使用x快速删除一一个字符使用d (delete)配合文本对象快速删除一个单词daw (d aroundword)d和x都可以搭配数字来执行多次
11、Vim快速修改:
常用有三个, r (replace) , C (change) , s(substitute)normal模式下使用r可以替换一个字符。s替换并进入插入模式使用c配合文本对象,我们可以快速进行修改
12、Vim查询:
使用/或者?进行前向或者反向搜索使用n/N跳转到下一个或者上一一个匹配使用*或者#进行当前单词的前向和后向匹配
上面是一些常用操作的整理。
-----------------------------分割线-------------------------------
下面是个人安装的vim和相关插件的记录:
MacVim下载地址:
https://github.com/macvim-dev/macvim/releases/tag/snapshot-161
直接安装:
下载插件:
创建目录:
mkdir ~/.vim/bundle/
克隆插件
gitclone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
配置和设置插件:
详细的配置文件(https://mp.weixin.qq.com/s?__biz=MzIyNjk0ODYxMA==&mid=2247483870&idx=1&sn=1e42796ec86688a5d46bd679b47595f2&chksm=e869e2b3df1e6ba5d4ad7f25b261333fa95e136ec8caff931d1957be5316392a14b84f55d3f7&token=1976314629&lang=zh_CN#rd)
"*****************************用户自定义设置*******************************""--单词补全"u [小写] --单步复原 [非插入模式]" U [大写] --整行复原 [非插入模式]":setsyntax=cpp --手动选择语法高亮 [或 :setfiletype=cpp]" :%!xxd --转储二进制文件,以十六进制形式显示":%!xxd -r --还原二进制文件"********************************设置快捷键*******************************"" Ctrl+D 删除当前行mapddaimapdda"Ctrl+N 显示缓冲区的下个文件并留在插入模式[插入模式]map:confirm bnextAimap:confirm bnextA"********************************设置编码*******************************""设置换行编码:set fileformats=unix,dos,mac"设置Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等setencoding=utf-8"设置文件编码if has("win32")set fileencoding=chineseelseset fileencoding=utf-8endif"Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式"并把fileencoding设置为探测出的编码方式set fileencodings=ucs-bom,utf-8,chines"解决菜单乱码source$VIMRUNTIME/delmenu.vimsource$VIMRUNTIME/menu.vim" 解决consle输出乱码language messages zh_CN.utf-8"********************************基本设置******************************"colorscheme desert "着色模式:灰色背景setguifont=Monaco:h14settabstop=4" 设置tab键的宽度set shiftwidth=4 "换行时行间交错使用4个空格setautoindent" 自动对齐set backspace=2 "设置退格键可用setcindent shiftwidth=4" 自动缩进4空格set smartindent "智能自动缩进setai!" 设置自动缩进set nu! "显示行号setshowmatch" 显示括号配对情况set mouse=a "启用鼠标setruler" 右下角显示光标位置的状态行set incsearch "查找book时,当输入/b时会自动找到sethlsearch" 开启高亮显示结果set incsearch "开启实时搜索功能setnowrapscan" 搜索到文件两端时不重新搜索set nocompatible "关闭兼容模式setcursorline" 突出显示当前行set hidden "允许在有未保存的修改时切换缓冲区setlist" 显示Tab符,使用一高亮竖线代替set listchars=tab:| "显示Tab符,使用一高亮竖线代替setnoswapfile" 设置无交换区文件"setwritebackup" 设置无备份文件set nobackup "设置无备份文件setautochdir" 设定文件浏览器目录为当前目录set foldmethod=syntax "选择代码折叠类型setfoldlevel=100" 禁止自动折叠set laststatus=2 "开启状态栏信息setcmdheight=2" 命令行的高度,默认为1,这里设为2set showtabline=2 "设置默认显示标签setclipboard+=unnamed" 与系统公用剪贴板set autoread "当文件在外部被修改,自动更新该文件setscrolloff=5" 设定光标离窗口上下边界 5 行时窗口自动滚动set guioptions-=T "去掉上方工具栏setautochdir" 自动切换到当前目录"setautoread" 自动检测并加载外部对文件的修改"setautowrite" 自动检测并加载外部对文件的修改"setshowcmd" 命令栏显示命令 "setignorecase smartcase" 搜索时智能忽略大小写syntax enable "打开语法高亮syntax on" 开启文件类型侦测if has("gui_running") "winpos 20 20" 指定窗口出现的位置,坐标原点在屏幕左上角 "setlines=20 columns=90" 指定窗口大小,lines为高度,columns为宽度 "setguioptions-=m" 隐藏菜单栏 "setguioptions-=T" 隐藏工具栏 "setguioptions-=L" 隐藏左侧滚动条 "setguioptions-=r" 隐藏右侧滚动条 set guioptions+=b "显示底部滚动条setnowrap" 设置不自动换行endif"*****************************设置状态栏*************************************"let &statusline=' %t %{&mod?(&ro?"*":"+"):(&ro?"=":"")} %1*|%* %{&ft==""?"any":&ft} %1*|%* %{&ff} %1*|%* %{(&fenc=="")?&enc:&fenc}%{(&bomb?",BOM":"")} %1*|%* %=%1*|%* 0x%B %1*|%* (%l,%c%V) %1*|%* %L %1*|%* %P'"******************************* 引号 && 括号自动匹配*******************************":inoremap ( ()i:inoremap )=ClosePair(')'):inoremap { {}i:inoremap }=ClosePair('}'):inoremap [ []i:inoremap ]=ClosePair(']'):inoremap < <>i:inoremap >=ClosePair('>'):inoremap """i:inoremap' ''i:inoremap ` ``ifunction ClosePair(char) if getline('.')[col('.') - 1] == a:char return "" else return a:char endifendf"配置插件set rtp+=~/.vim/bundle/Vundle.vimcall vundle#begin() Plugin 'gmarik/Vundle.vim'Plugin 'scrooloose/nerdtree'call vundle#end()" NerdTree才插件的配置信息""将F2设置为开关NERDTree的快捷键map:NERDTreeToggle""修改树的显示图标let g:NERDTreeDirArrowExpandable = '+'let g:NERDTreeDirArrowCollapsible = '-'""窗口位置let g:NERDTreeWinPos='left'""窗口尺寸let g:NERDTreeSize=30""窗口是否显示行号let g:NERDTreeShowLineNumbers=1""不显示隐藏文件let g:NERDTreeHidden=0
接下来直接执行
:PluginInstall
安装完成。
参考链接:
https://www.imooc.com/video/19452
公众号:
thelostworld:
个人知乎:
https://www.zhihu.com/people/fu-wei-43-69/columns
个人简书:
https://www.jianshu.com/u/bf0e38a8d400