答:点击 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