答:点击 Esc 键,然后 :q 退出编辑器(或 :q! 不保存退出编辑器,或:q! 退出编辑器不保存,或 :x 等同于:wq 退出编辑器并保存))。
答:利用 > 命令, >5> 或者 5>> 缩进五行, >% 缩进一个block(需要将光标放在括号上)。
问:如何在Vim 中符号替换为换行符,:%s/,/\n/g 将会插入^@ 字符?
答:用/r 代替 /n 。在Vim 中,/r 和 /n 分别插入0X00 和0X0A 字符。
答:set nohlsearch 关闭高亮, set hlsearch! 打开高亮。
答: /letter\c搜索letter 且大小写不敏感,/letter\C 大小写敏感(默认);或:set ignorecase 设置大小写不敏感。
问:如何复制一行?
答:yy 复制一行,dd 剪切一行,p 粘贴内容在本行下一行,P 粘贴内容在本行上一行。
问:w !sudo tee % 如何实现sudo (root 权限)保存的功能?
答:% 表示当前文件,tee 将即输出到% 还输出到屏幕。
答:在vimrc 中添加
filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab
答:A 移动到本行最后并进入插入模式或 $ 移动到最后(普通模式,normal mode)
答:使用tabs(Vim7 中引入),:tabe <filepath> 在新tab 中打开文件,:tabn 和 :tabp 在文件之间切换。还可以通过:sp <filepath> 进行分屏,ctrl+w 在屏幕之前切换。
答:remap 是使得映射命令能够递归地映射。系统默认是开启的(建议)。map/noremapd 都是映射命令。:map 和 :noremap 是递归映射(recursive)和非递归映射(no-recursive)。
:map j gg
:map Q j
:noremap W j
j 映射为 gg。Q 递归地映射为 gg。 W 将不会映射到 gg 而只会映射到 j ,因为它使用非递归映射。考虑到还有普通模式(normal)可视模式(visual),还有对应的映射命令(:nmap 和 :nnoremap)与 (:vmap 和 :vnoremap)。
答::set paste 进入插入粘贴模式(显示-- INSERT (paste) --),粘贴后取消 -:set nopast。可以将<F3> 键进行映射,从而快速切换模式::set pastetoggle=<F3> 。
答:Vim 中寄存器可以用于暂时存储文本、宏命令等,以备后面使用。
:reg a b c 打印出 a b c 寄存器中内容;"a 表示寄存器a,"ayy 复制一行到寄存器a,"ap复制到当前位置;"Ayy 将内容增添在寄存器a;"+ 是一个特殊寄存器指向系统剪切板(clipboard),"+p 将系统剪切板中的内容粘贴到当前位置; "0 – "9 是九个数字寄存器,"0 寄存器保存复制(yank)的内容,"1 – "9 按时间分别保存删除(dd)的内容。
答:<Ctrl>+v 进入可视块(visual block)模式,选择多行,<Shift>+i 进入插入(insert)模式,在行首加入注释符(//,#),<Esc> 键将在选择的多行前都添加注释符。
答::set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
:set list (根据我的经验,不要显示空格,或者空格用点符号更美观 space:·)
答:q<letter> 开始记录,再次按q 结束记录,并通过@<letter> 回放。它可以记录所有你输入的,比如查找,移动,替换等操作。非常有用。
问:如何删除空白行?
答::g/^$/d
答:gg=G。 gg 跳到文件开头, = 缩进对其,G 到文件末尾。
问:如何粘贴内容到系统剪切板(clipboard),或者从系统剪切板到Vim 中?
答:寄存器 "* 和 "+ 是系统剪切板寄存器,"*yy 或者 "+yy 将复制行到系统剪切板,"*p 和 "+P 粘贴到本行下一行或者上一行。(我更习惯用<shift>+<insert> 粘贴)
问:如何将(Win)dos 中文件行结束转化为Linux 行结束?
答:dos2unix 是专门处理这个的工具。或者使用替换命令 :%s/^M//g ,或 :set ff=unix 。
答:u 回退,<Ctrl>+r 重做。
答:zz 移动当前行到屏幕中间,zt 移动当前行到屏幕顶部,zb 移动当前行到屏幕底部。
答:"_d 删除到“黑洞”寄存器
问:查找下一个?
答:n 查找文件的上一个,N 查找文件中上一个
答:用.\{-} 代替.* 。
答:在 ~/.vimrc 内添加
highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
答:gg"*yG 复制内容到"* 寄存器。
问:如何关闭单个打开的文件缓存(e.g. vim a.txt b.txt 打开后如何关闭一个文件缓存)?
答::bd 关闭当前缓冲区,:ls 列出当前所有缓冲区,:bd2 关闭第二个缓冲区。
问:^M 是什么?
答:Unix 用 0xA 表示新行,Windows 则用 0xD 0xA,^M 显示为 0xD 。
答::qa 退出所有选项,:wqa保存所有选项页并退出。
问:自动补全?
答:YouCompleteMe

