Skip to main content

Vim

Published: 2020-02-08 | Lastmod: 2020-11-13

安装 #

cd ~
git clone git@github.com:nuhuo08/MyVimrc.git
mv MyVimrc .vim_mengqi
ln -s .vim_mengqi/.vimrc .vimrc
ln -s .vim_mengqi/.ackrc .ackrc
# ln -s .vim_mengqi/.bash_aliases .bash_aliases
cd .vim_mengqi
mkdir -p cache plugged temp_dirs/undodir
vi
:PlugInstall

#NOTE: You may need to run the command below for several times. Since downloading submodules may fail.
cd ~/.vim_mengqi/plugged/YouCompleteMe
git submodule update --init --recursive

#NOTE: YCM donot support python2.7 any more. For Ubuntu 16.04, checkout 9309f77
git checkout 9309f77

python3 install.py --clang-completer

常用快捷命令 #

,w                 保存

,nn                打开文件浏览树
,nf                将文件浏览树定位到当前文件
,tb                打开函数列表

,f                 查找工程文件
,j                 最近编辑文件列表

,g                 开始查找某字符串
,r                 替换visual选中的字符串
gv                 查找visual选中模式下的字符串

gcc                注释
ga*|               以|符号对选中的多行进行对齐

ctrl+n             开始多光标模式
ctrl+x             多光标模式,跳过当前词
ctrl+p             多光标模式,回到上一次选中词

,q                 打开quickfix窗口
,n                 下一个quickfix记录
,p                 上一个quickfix记录

alt+p              粘贴上一个剪切板内容
alt+m              粘贴下一个剪切板内容

g]                 跳转到tag

,,w                高级的移动模式

ctrl+d             窗口翻页
ctrl+u
ctrl+f
ctrl+b


zt                 当前行在窗口的位置
zz
zb

*                  查找并高亮字符串
#

,m                 删除^M符号

gt                 下一个tab
gT                 上一个tab
2gt                第二个tab

]c                 跳到下一处Git修改处
[c

,hs                git stash
,hu                git undo
,hp                git preview
,d		           toggle gitgutter

ma                 设置书签a
`a
'a

Vim的配置 #

vim有强大的可扩展性,请参考Learn Vimscript the Hard Way

~/.vim_mengqi/vimrc/文件夹下面时候个人定制的很多配置项,熟悉以后可以自定义很多快捷的操作。

Basic Settings

set用于配置基本的vim属性。例如,设置下面命令,可以在vim中使用鼠标。

set mouse=a

map用于映射快捷键。例如,下面的命令,可以使用<C-j>映射<C-W>j,实现在窗口中跳转。

map <C-j> <C-W>j

map的变体有多种,例如vnoremap可以在visual模式下映射一些命令。

Extended Settings

fun! CleanExtraSpaces()
    let save_cursor = getpos(".")
    let old_query = getreg('/')
    silent! %s/\s\+$//e
    call setpos('.', save_cursor)
    call setreg('/', old_query)
endfun

if has("autocmd")
    autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.h,*.c,*.cpp,*.m :call CleanExtraSpaces()
endif

可以自定义函数CleanExtraSpaces,可以使用autocmd自动运行,BufWritePre则表示在写入buffer之前做一些操作。 上面这段脚本,可以自动清除txt等文件末尾多余的空白符。

Plugin Settings

使用了Plug作为插件管理器,插件可以扩展vim的功能,使编辑更为高效。

call plug#begin('~/.vim_mengqi/plugged')

Plug 'tpope/vim-fugitive',
Plug 'airblade/vim-gitgutter'

call plug#end()

上面的命令,为vim添加了两个插件的git仓库,运行:PlugInstall,就可以安装好相应的两个插件。

插件可以配置相对应的快捷键,例如:

let g:gitgutter_enabled=1
let g:gitgutter_diff_args = '-w'
set updatetime=100
nnoremap <silent> <leader>d :GitGutterToggle<cr>

启动gitgutter插件;忽略空白字符的修改;更新时间为100ms;使用,d启动或关闭该插件的功能。

其他 #

Add flag to CMakeList.txt: -DCMAKE_EXPORT_COMPILE_COMMANDS=1: YouCompleteMe就可以自动识别到所需要的代码文件了。 此功能由.ycm_c-c++_conf.py提供。

cd --:可以看到terminal里面cd的目录历史。此功能由acd_func.sh提供。


Next: Path Planning
Previous: Git