VIM_Aron
2017-09-07 14:59:49 0 举报
AI智能生成
Vim常用命令
作者其他创作
大纲/内容
常见问题
退格键Backspace失效
SecureCRT
<div>设置一下secureCRT就可以了.</div><div><br></div><div><br></div><div>Options-->Session Options-->Terminal-->Emulation-->Mapped Keys-->Other mappings</div><div><br></div><div><br></div><div>选中复选框 Backspace sends delet</div><div> Delete sends backspac</div><div><br></div><div>trust me, it's going to be fine.</div>
Cmder
用bash打开的vim就正常,但不能用cmder的alias
Shift+Backspace代替
F5运行
.vimrc
<div>map <F5> :call CompileRunGcc()<CR><br></div><div> func! CompileRunGcc()</div><div> exec "w"</div><div>if &filetype == 'c'</div><div> exec "!g++ % -o %<"</div><div> exec "!time ./%<"</div><div>elseif &filetype == 'cpp'</div><div> exec "!g++ % -o %<"</div><div> exec "!time ./%<"</div><div>elseif &filetype == 'java'</div><div> exec "!javac %"</div><div> exec "!time java %<"</div><div>elseif &filetype == 'sh'</div><div> :!time bash %</div><div>elseif &filetype == 'python'</div><div> exec "!time python2.7 %"</div><div>elseif &filetype == 'html'</div><div> exec "!firefox % &"</div><div>elseif &filetype == 'go'</div><div> " exec "!go build %<"</div><div> exec "!time go run %"</div><div>elseif &filetype == 'mkd'</div><div> exec "!~/.vim/markdown.pl % > %.html &"</div><div> exec "!firefox %.html &"</div><div>endif</div><div> endfunc</div>
子主题
+python/dyn、+python3/dyn
但是:echo has('python')却为0
不能同时支持python和python3
读取插件目录
Gvim读取不到usr/share/vim/vim80/syntax cmder中vim可以
Gvim只会去usr/bin中读取,因为在环境变量了配置了VIM指向bin
把syntax拷贝到usr/bin/中即可
语法 颜色正常
右键打开Gvim.exe
不能自动匹配括号 单引号,双引号
echo %HOME%
读不到<br><div>E15: Invalid expression: %HOME%</div><div>E15: Invalid expression: %HOME%</div>
Cmder也读不到
echo $HOME
/c/Users/liuwenrong.CCDOMAIN<br>
cmder
C:\Users\liuwenrong.CCDOMAIN
GVim.exe
ycmd server shut down
不能自动提示
Python
Python文件时tab报错g:pydiction_location
let g:pydiction_location = '~/.vim/bundle/pydiction/complete-dict
加上这句就可以了
中文乱码
一次生效<br>
:进入命令行输入
set encoding=utf-8
配置文件输入
设置到/usr/share/vim/vim81/defaults.vim
配置
_vimrc & .vimrc
1 .........................................
2.vimrc 复制Insert cmder的vim无效
170803_.vimrc加入鼠标复制Ctrl+y复制
170816_.vimrc 强大配置-插件
190808简单配置
set encoding=utf-8<br>syntax on<br>colo evening<br>set number<br>
AS的插件IdeaVim<br>IDEA Intellij小技巧和插件<br>
缺点
<div>16. 一些在目前版本已知没有实现的一些常用Vim功能 </div><div>(如果对Vim不熟悉可以跳过这节) </div><div>a)let命令 (没有let命令就无法导出/导入寄存器内容,也就是无法导入宏) </div><div>b):g命令 (在文本处理中很有用的一个命令,在编程中倒是不那么常用) </div><div>c)!命令 (执行shell命令) </div><div>d)大部分正则表达式标记 (例如 \%V, \v 等等) </div><div>e) 某些多键命令双击最后一个字符表示作用于当前行。例如在Vim中gUU可以把当前行转换为大写,在IdeaVim中无效,实现同样功能可以先用V命令选中当前行,再用gU转换为大写。 </div><div>f)关于窗口操作的大部分命令 (Ctrl+w系列命令, :split等) </div><div>g)所有Vim脚本插件 (不过大部分可以用Idea自身的功能和插件来补偿)</div>
配置文件.ideavimrc
3.ideavim AS的配置
将Vim加到右键注册表
1. Win+r 输入regedit
2. .删掉注册表中的HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\gvim
3.直接进入注册表,在HKEY_CLASSES_ROOT\*\shell下添加项“Edit With GVim80,设置值为 Edit With GVim80<br> 再在项“Edit With GVim80”下添加子项“command” [右键-新建-项] ,在其右边窗口把其键值设定为<br>"E:\Program Files\Vim\vim80\gvim.exe" -p --remote-tab-silent "%1"
安装
<div>Install will do for you:</div><div> 1 Install .bat files to use Vim at the command line:</div><div> 4 Overwrite C:\Windows\evim.bat</div><div> 5 Overwrite C:\Windows\view.bat</div><div> 6 Overwrite C:\Windows\gview.bat</div><div> 7 Overwrite C:\Windows\vimdiff.bat</div><div> 8 Overwrite C:\Windows\gvimdiff.bat</div><div>10 Do NOT change startup file E:\Program Files\Vim\_vimrc</div><div>14 Install an entry for Vim in the popup menu for the right</div><div> mouse button so that you can edit any file with Vim</div><div>15 Add Vim to the "Open With..." list in the popup menu for the right</div><div> mouse button so that you can edit any file with Vim</div><div>16 Add Vim to the Start menu</div><div>17 Create a desktop icon for gVim</div><div>18 Create a desktop icon for gVim Easy</div><div>19 Create a desktop icon for gVim Read-only</div><div>20 Do NOT create plugin directories</div><div>To change an item, enter its number</div>
vim.exe路径配置在cmder中
E:\Program Files\Git\usr\bin
终极配置
spf13
https://github.com/spf13/spf13-vim
查看版本和配置的位置<br>
:version
system vimrc file: "$VIM/vimrc"<br> user vimrc file: "$HOME/.vimrc"<br> 2nd user vimrc file: "~/.vim/vimrc"<br> user exrc file: "$HOME/.exrc"<br> defaults file: "$VIMRUNTIME/defaults.vim"<br> fall-back for $VIM: "/home/users/liuwenrong/share/vim"
运行路径<br>
$VIMRUNTIME: "/usr/share/vim/vim81"<br>
其中git amend命令打开的vim在git安装目录
插件
文件Buffer管理
NerdTree
<div>let NERDTreeIgnore=['\.pyc']</div>
<div>map <F3> :NERDTreeToggle<CR></div><div>imap <F3> <ESC> :NERDTreeToggle<CR></div><div>"打开树状文件目录 </div>
快捷键
<div>I: hidden files (on)</div>
是否隐藏文件
vim-nerdtree-tabs
tab可以共享一个NerdTree
nerdtree-git-plugin
MiniBufExplorer
快捷键
先Ctrl+k移到buff窗口
<div><Tab> 向前循环切换到每个buffer名上</div><div><S-Tab> 向后循环切换到每个buffer名上</div><div><Enter> 在打开光标所在的buffer</div><div>d 删除光标所在的buffer</div>
命令行模式
<div>:bn 打开当前buffer的下一个buffer</div><div>:bp 打开当前buffer的前一个buffer</div><div>:b"num" 打开指定的buffer,"num"指的是buffer开始的那个数字,比如上图,我想打开list_audit.erb,输入:b7就ok了</div>
代码补全
代码自动补全工具Pydiction 在官网上下载Pydiction,将python_pydiction.vim、complete_dict和pydiction.py三个文件放到D:\Program Files\Vim\vim73\ftplugin。使用时Tab键就可以进行自动补全。
YouCompleteMe
Window
自动补全括号
Auto-Pairs
Bundle 'vim-scripts/Auto-Pairs'
语法高亮和检查
语法高亮插件python.vim
syntastic语法检查插件和ListToggle
python高级语法检查功能
pylint (高级python语法检查支持)
Asynchronous Lint Engine --- ale
只支持vim8.0, 因为检测动作是异步完成的,所以基本(绝对)不会卡
<div>pyflakes</div><div>提供实时检查python代码语法的功能(强烈推荐!)</div>
文件内跳转
Easymotion
- jump anywhere 任意跳转 类似AS的Ctrl+;
<leader><leader>b
往前找单词
<leader><leader>w
往后找单词,并定位到单词首
<leader><leader>e
往后找单词,并定位到单词末尾
代码跳转
Ctags + Taglist
ptags.py:用 python 编写,为 Python 而设计,它位于你的 Python 源代码目录 Tools/scripts/ptags.py。
<div>把该文件拷贝到项目目录下,执行下面命令: </div><div>ptags.py *py</div>
python-mode
Ctrl-]
gf 跳转
跳转路径
搜索插件
CtrlP - fast file finder
杀手级的VIM查找文件插件
fzf Fuzzy Finder
目前最快的文件搜索器,使用Go语言实现, 几万个文件秒搜
<div>nnoremap <leader>ff :FufFile<CR> </div><div>nnorempa <leader>fb :FufBuffer<CR> </div>
<div>Ctrl-n , Ctrl-p上下选择项目</div><div> Ctrl-j开启该档案到水平分割视窗</div><div> Ctrl-k开启该档案到垂直分割视窗</div><div> Ctrl-l开启档案至新分页</div><div> Ctrl-\ Ctrl-\ 切换搜寻模式( fuzzy matching 或partial matching )</div>
ag.vim
从ack.vim上clone出来的分支,搜索引擎使用了the_silver_searcher,可以快速批量搜索代码,搜索文件, 模糊匹配, 正则表达式, 什么IDE的批量搜索在它面前都弱爆了
NERDCommenter
快速注释
运行 <leader>cc 注释, <leader>cu 反注释,也可以都调用 <leader>c<SPACE> ,它会根据是否有注释而选择来注释还是取消注释。
Gundo
历史记录 版本控制
通常会将这句加入 _vimrc : nnoremap <Leader>u :GundoToggle<CR>
F4
美观插件
状态栏
<a target="_blank" rel="nofollow noreferrer">vim-airline</a>
airline 已经实现了统一 ,同时支持各种插件,当然带来的负担就是会导致vim启动慢了一点. 当然如果要用vim装逼的话,这个是必不可少的.
powerline
Python相关
jedi-vim
https://github.com/davidhalter/jedi-vim
自动补全,跳转
<div>Completion <C-Space></div><div>Goto assignments <leader>g (typical goto function)</div><div>Goto definitions <leader>d (follow identifier as far as possible, includes imports and statements)</div><div>Show Documentation/Pydoc K (shows a popup with assignments)</div><div>Renaming <leader>r</div><div>Usages <leader>n (shows all the usages of a name)</div><div>Open module, e.g. :Pyimport os (opens the os module)</div>
Python-mode
vim python IDE
<div> K -> 跳到Python doc处</div><div> <leader>r -> 运行当前代码</div><div> <leader>b -> 增加/删除断点</div>
Go to definition (<C-c>g for :RopeGotoDefinition)
<div>" Override go-to.definition key shortcut to Ctrl-]</div><div>let g:pymode_rope_goto_definition_bind = "<C-]>"</div>
<div><br></div><div>" Override run current python file key shortcut to Ctrl-Shift-e</div><div>let g:pymode_run_bind = "<C-S-e>"</div><div><br></div><div>" Override view python doc key shortcut to Ctrl-Shift-d</div><div>let g:pymode_doc_bind = "<C-S-d>"</div>
Vim几种模式
基础命令
i 插入 进入编辑INSERT状态
:wq或者:x 或 ZZ(按住shift) 保存退出
编辑状态 先按Esc,以下命令都这样
:q 退出
:q! 不保存退出
模式
编辑INSERT模式
<div>i:在当前字符的左边插入</div><div>I:在当前行首插入insert</div><div>a:在当前字符的右边插入</div><div>A:在当前行尾插入append</div><div>o:在当前行下面插入一个新行</div><div>O:在当前行上面插入一个新行</div>
<C-p>或是<C-n>,自动补齐功能
r 和一個字符替換光標所在位置的字符<br>R 替换模式,替换光标之后的字符<Esc>退出
高级
Ctrl-r a
将寄存器reg中a复制在代码中
一般命令模式
移动光标
使用 h、j、k、l<br>
实现左、下、上、右箭头<br>
当前行 0 ^ $ f F t T , ;
<div>0 → 到行头</div><div>^ → 到本行的第一个非blank字符</div><div>$ → 到行尾</div><div>g_ → 到本行最后一个不是blank字符的位置。</div><div>fa → 到下一个为字符a的字符处,</div><div>t, → 到字符逗号前的第一个字符。;分号重复 ,逗号反向重复</div><div>3fa → 在当前行查找第三个出现的a。</div><div>F 和 T → 和 f 和 t 一样,只不过是相反方向。</div>
当前屏
<div><Ctrl-f>:向下移动一屏。front</div><div><Ctrl-d>:向下移动半屏。</div><div><Ctrl-b>:向上移动一屏。back</div><div><Ctrl-u>:向上移动半屏。</div>
<div>H:移动光标到屏幕上面 Home</div><div>M:移动光标到屏幕中间 Middle</div><div>L:移动光标到屏幕下面 Last</div>
zt 当前光标所在的行滚动到屏 顶面<br>zz 当前光标所在的行滚动到屏 中间<br>zb 屏幕底部
<div>w到下一个单词的开头word</div><div>e到下一个单词的结尾end<br>b 到该单词开头 begin</div>
当前文档
<div>G:到文件尾</div><div>numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)</div><div>gg:到文件首 gd:跳到光标所在单词变量定义处</div>
<div>*:读取光标处的字符串,并且移动光标到它再次出现的地方。<br></div><div><div>#:和上面的类似,但是是往反方向寻找。</div><div>%:在成对的括号等符号间移动,比如成对的 [ ] , { }, ( ) 之间。<br>将光标放到任意符号上,然后通过 % 来移动到和这个符号匹配的符号上,<br>% 还可以正确的识别括号的嵌套层数,总是移动到真正匹配的位置上。<br>因此这个命令在编辑程序代码的时候非常有用,<br>可以让你方便的在一段代码的头尾间移动。</div></div>
/ ?
/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n移动到下个 text 处,N 移动到上一个 text 处 。
?text:和上面类似,但是是反方向。
gd 跳转当前光标所在变量方法的定义处
<Ctrl-e> 向下滚屏
切换窗口
Ctrl+w+j 改成 Ctrl+j 切换到下一个窗口文档
<div>m{a-z}:在当前光标的位置标记一个书签,名字为 a-z 的单个字母。<br>书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。</div><div>`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。</div><div>`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。<br>'a :到书签a处行首. :marks查看标记</div>
'' 回到上次编辑处, 两个单引号
编辑
motion<br>
<div>d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,<br>dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。</div><div>y{motion}:和上面类似,不过是拷贝。yank拔</div><div>c{motion}:和 d{motion} 类似,不过最后进入插入模式。</div><div>dd:剪切当前行。</div><div>yy:拷贝当前行。</div><div>cc:剪切当前行并且进入插入模式。</div><div>D:剪切从光标位置到行尾到剪贴板。等同于d$</div><div>y$ 复制当前光标到结尾 Y:拷贝当前行。</div><div>C:和 D 类似,最后进入插入模式。等同于c$</div><div>x:剪切当前字符到剪贴板。 5x 删除5个字符</div><div>s:和x类似,不过最后进入插入模式。</div>
数字
<div>3j 将会把光标向下移动三行。</div><div>10dd 将会删除十行。</div><div>y3t″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。</div>
<div><start position><command><end position></div><div>例如 0y$ 命令意味着:</div><div>0 → 先到行头</div><div>y → 从这里开始拷贝</div><div>$ → 拷贝到本行最后一个字符<br><br></div>
p: 粘贴 paste put
. 重复上一个命令
"ayy 将本行复制到a寄存器reg
"ap 将a缓冲区的内容粘贴
:req 查看寄存器
可视化/选中
"+y 复制本行到系统剪切板
一般命令模式
"+yy 复制本行到系统剪切板
"+2yy 复制两行
r 和一個字符替換光標所在位置的字符<br>R 替换模式,替换光标之后的字符<Esc>退出
高级
要改变括号内的文本,需要执行 ci( (读做 change inner parentheses)
ci<
效果:删除<>的内容
删除整个段落的内容,需要执行 dap (读做:delete around paragraph)。
交换字符 xp
上下行交换 ddp
<div>u:撤销最后一次命令 undo</div><div>U: 来修正整行,撤消在一行中所做的改动</div><div>CTRL-R: 撤消以前的撤消命令,redo</div>
高级操作
宏录制
<div>按qa(q表示开始录制宏,宏的名字为a) </div><div>再shift+>>(表示按住shift,连按两下>,再放开shift。此时第一行应当向后tab了一下) </div><div>再j^(此时下移一行,并置光标于行首) </div><div>再shift+>> 再shift+>>(即第二行向后tab两下) </div><div>再j^(下移一行,并将光标置于行首,为后续操作做准备) </div><div>再q(表示宏录制结束,VIM会提示记录完成) </div><div>这样宏录完了,可以用了。 </div><div>再@a,看到了效果了吧?宏执行了一次,即3、4行成功了。还剩下6段,但是你不用按6次@a,而是只要按下6@a就行了!!! </div><br>
qA可以追加命令到a寄存器<br>
:reg<br>
可以查看寄存器的内容
查看a寄存器
:reg a
:echo @a
修改寄存器a<br>
:let @a="修改后的命令"<br>
这种方案需要重新输入,意义不大
第二种方案
G<br>
到文件底部
:put a
将寄存器a的内容复制到文件末尾
做相应的修改
替换寄存器a的内容:两种方案
"add
将当前行的内容存放在a寄存器
会多一个换行符
0"ay$
之后在dd删除末尾行即可
一些通用的宏
行首加个tab制表符
>>j^
例:将其放置寄存器b中
@b
即可将当前行添加一个制表符
5@b
从当前行开始的5行,每行添加一个制表符
:ab sys SystemUI
当你输入sys 回车或空格 sys变成了SystemUI
文件切换 Ctrl+Shift+6 或 :e#
命令行模式 即按: / ?
配置 :set all 查看所有的配置<br>
设置缩进
:set smartindent // 设置缩进 :set smartindent shiftwidth=4 // C语言自动缩进,缩进值为4个字符宽度
:set ruler // 显示光标信息(右下角)
:set number //显示行号(左边)
:syntax on //关键字高亮
显示换行
:set list
:set nolist
:set ic 就是英文忽略大小寫Ignore Case的首字母縮寫詞<br>
字符编码
<div>:set encoding=utf-8</div><div>:set fileencodings=ucs-bom,utf-8,cp936</div><div>:set fileencoding=gb2312</div><div>:set termencoding=utf-8</div>
:! 输入一个外部命令<br>
如:!dir 列出目录下文件和文件夹
:!rm FILENAME<span class="Apple-tab-span" style="white-space:pre"> </span>- 用于刪除名為 FILENAME 的文件
要將對文件的改動保存到文件中,請輸入 :w FILENAME
要向當前文件中插入另外的文件的內容,請輸入 :r FILENAME
/ ?
/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n移动到下个 text 处,N 移动到上一个 text 处 。
?text:和上面类似,但是是反方向。
简单命令
:marks查看标记
:map 查看键盘映射
:files 查看打开的文件
常用命令
: split two.c // 多文件编辑
:e 文件名 打开文件。
新建文件
:new 文件名.后缀名
:new 文件名.后缀 新建文件。
:tabnew 文件名
新建一个tab标签并新建文件
替换
<div>在一行內替換頭一個字符串 old 為新的字符串 new,請輸入 :s/old/new</div><div> 在一行內替換所有的字符串 old 為新的字符串 new,請輸入 :s/old/new/g</div><div> 在兩行內替換所有的字符串 old 為新的字符串 new,請輸入 :#,#s/old/new/g</div><div> 在文件內替換所有的字符串 old 為新的字符串 new,請輸入 :%s/old/new/g</div><div> 進行全文替換時詢問用戶確認每個替換需添加 c 選項,請輸入 :%s/old/new/gc</div>
:s/old/new/gn<br>
s当前行g全部n不执行,通常用来查看个数<br>
<div>可视化模式 v:按字符选择。经常使用的模式,所以亲自尝试一下它。</div><div>V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。</div><div><C-V>:按块选择。非常强大,只在很少的编辑器中才有这样的功能</div>
<div>J → 把所有的行连接起来(变成一行)</div><div>< 或 > → 左右缩进</div><div>= → 自动给缩进 </div>
<div>块操作: <C-v></div><div>块操作,典型的操作: 0 <C-v> <C-d> I-- [ESC]</div><div>^ → 到行头</div><div><C-v> → 开始块操作</div><div><C-d> → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)</div><div>I-- [ESC] → I是插入,插入“--”,按ESC键来为每一行生效。</div>
大小写
Vim
选择模式/可视化
<div>gU (变大写) </div><div>gu (变小写) <br>g~字符反转</div>
一般模式
guu 会整行变小写
gUU 整行大写
g~~行翻转(当然指大小写啦)?
gu方向键
gul 下一个字符变小写
gu5h 向前5个字符变小写
g~j 当前行和下一行大小写反转
ASVim
可视化模式/选中字符
g~~ 选中的反转
guu 选中的变小写
gUU 选中的变大写
一般模式
gU方向键
gUk 当前行和上一行变大写
gu3j 当前行和下三行变小写
几个vim工具对比
gVim
功能多,强大
优点
多行编辑几千行也很快
缺点
AS的ideaVim
缺点
多行编辑5千行卡的一批
Sublime中的vim
Ctrl+V默认是粘贴,默认的多行编辑只能逐个选行
Vim of Atom
cmder,zsh里面的vim
颜色,光标不好配置
0 条评论
下一页