为什么用vim

发布时间 2023-11-05 19:49:47作者: 仰望星空_22

最开始用的是notepadd,后来听说其作者是个台独分子,因此坚决不用。那就用vim吧反正在linux上也用,学习一遍windows、linux上都可以用。

后来看Linux内核代码必须要用到vim,为什么?因为windows下文件名相同大小写不同不能同时存在一个文件夹中,比如main.c和MAIN.C不能同时存在一个文件夹中。Linux内核和一些C/C++库有很多这样的文件。因此必须在Linux操作系统阅读这些库源码。

而我的工作电脑是Windows,Linux的装在虚拟机中,为了减少内存提高使用速度就将图形界面删掉了,因此source insight和vscode不能用了只能用vim。其实vim配合cscope和ctags挺好用的,没有图形界面的拖累即便在虚拟机中速度也很快,比source insight还快。

学习vim配置花了很长时间,逐步摸索适合自己的vim配置。熟练了以后就离不开了。

后来发现用vim写markdown是真方便。

  1. 将光标定位到标题那一行按下‘数字+;‘就能插入#号,比如'1;'。另外按‘[’可以跳到下一个标题处,同理‘]’跳到上一个标题处。
autocmd Filetype markdown nmap <buffer> <silent> 1; 0i# <ESC>
autocmd Filetype markdown nmap <buffer> <silent> 2; 0i## <ESC>
autocmd Filetype markdown nmap <buffer> <silent> 3; 0i### <ESC>
autocmd Filetype markdown nmap <buffer> <silent> 4; 0i#### <ESC>
  1. 按下‘空格+c‘在markdown将选中的代码中用c包含
autocmd Filetype markdown vmap gvd s```c<CR><CR>```<Esc>kp
  1. 有时候要快速定位的文件中的某一行只记得大概在位置,文件很长不想一页一页翻,gg和G只能定位到第一行和最后一行,可以这样配置:
noremap 1<space> 10<S-%>
noremap 2<space> 20<S-%>
noremap 3<space> 30<S-%>
noremap 4<space> 40<S-%>
noremap 5<space> 50<S-%>
noremap 6<space> 60<S-%>
noremap 7<space> 70<S-%>
noremap 8<space> 80<S-%>
noremap 9<space> 90<S-%>

按下‘数字+空格’可以定位到文件的百分之几处,比如文件有2000行按下‘5+空格’就能定位到文件中的1000行处。

  1. 选中文字按下‘gvx’加粗,按下‘gvf’加颜色,按下‘gvc’将图片一致网页中部。
" 设置gvx键将选中的文字加**号
autocmd Filetype markdown vmap gvx s****<Esc>hhp
" 设置gvf键将选中的文字加上<font>标签
autocmd Filetype markdown vmap gvf s<font color=red></font><Esc>bbp
" 设置gvc键将选中的文字加上<center>标签
autocmd Filetype markdown vmap gvc s<center><CR><CR><CR></center><Esc>kp
" 设置gv`键将选中的文字加上``标签
autocmd Filetype markdown vmap gv` s``<Esc>P
  1. 每次在当前行定位列非常不方便,按键‘gm’只能定位到屏幕行中央,干脆设置按下‘数字+t’可以定位到屏幕行的百分比处,比如按下‘5+t’将跳到屏幕行中间位置。
function! LOCA_COL(count)
    " echo &columns
    :exe 'normal' float2nr(round((winwidth('%')-5) * min([9, v:count]) / 10.0)) . '|'
endfunction
nnoremap t :<c-u>call LOCA_COL(v:count)<CR>
  1. $和^这两个符号的按键很不方便,因此重新设置:
noremap gl g$
noremap gh g^

" 按ctl+l移动光标到行首,按ctl+h移动光标到行尾

nmap <C-l> <end>
nmap <C-h> <home>
  1. 每次想要换一行时按o都要按Esc退出来,干脆重新映射快捷键。
:nnoremap <c-k> a<CR><ESC> " 按Ctrl+k鼠标当前字符后分割为两行
:nnoremap <NL> i<CR><ESC> " 按Ctrl+j鼠标当前字符前分割为两行

" 按ctl+l在当前行下方添加一行,按ctl+h在当前行上方添加一行

nmap <C-l> o<ESC>
nmap <C-h> O<ESC>
  1. 插件,很多喜欢用置Vundle管理vim插件,其实根本不需要,vim8.0后就自带插件管理器了。到~/.vim/pack/dist/start目录(没有就创建一个)中执行git clone 插件githu地址就可以安装插件,vim启动时会自动加载插件。
    在~/.vim/pack/dist/start目录中安装插件:
“ markdow浏览
git clone https://github.com/iamcco/markdown-preview.nvim.git
“ 写markdow时,粘贴图片会用到
git clone https://github.com/img-paste-devs/img-paste.vim.git
“ 代码补全,比较难安装
git clone https://github.com/ycm-core/YouCompleteMe.git
“ 多光标编辑,类似vscode中ctrl+d多处选中
git clone https://github.com/terryma/vim-multiple-cursors.git
“ 注释用的
git clone https://github.com/tpope/vim-commentary.git
“ 树形目录显示
git clone https://github.com/preservim/nerdtree.git
“ 底部状态栏
git clone https://github.com/vim-airline/vim-airline.git
  1. 当然在windows下还可以设置ctrl+c、ctrl+v等可以复制粘贴到其他窗口。
" 全选
nnoremap <C-a> ggvG"y+

" 在视图和选择模式下按ctrl+c,复制选中的内容
vnoremap <C-c> "+y

" 设置在常规模式下按下ctrl+v,粘贴"+p中的内容
noremap <C-v> "+p
imap <C-v> <ESC>"+p

" 剪切
vmap <C-x> "+x

" 保存ctrl+s
nmap <C-s> :w<CR>
vmap <C-s> <C-C>:w<CR>
imap <C-s> <Esc>:w<CR>