MENU

猛男利器-- vim

September 7, 2020 • Read: 751 • Linux

猛男利器-vim

你看到的这篇文章是使用vim编辑而成

我在上一句篇文章里面已经讲解了如何配置ubuntu子系统,既然ubuntu都已经装上了,那怎么能缺少vim呢?
值得高兴的是,ubuntu本身就自带了vim编辑器,但是糟糕的是,自带的vim编辑器却并没有我们想象的那样容易上手,于是我开了这样一篇文章来记录博主配置vim的时候遇到的坑

1.基础配置文件

vim的配置文件是在~目录下的,所以我们首先编辑~目录下的.vimrc文件,如果目录下没有这个文件,直接生成一个新的文件就行

打开以后,应该是什么都没有的,这里博主推荐一些基础的配置

" 基础设置 "
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
set nu
set autoindent
set cindent

上面的配置博主也是借鉴的别人的,大致意思就是设置了缩进默认4格,设置了自动缩进,设置了显示行号

2.显示头部注释

在vscode里面,我安装了koroFileHeader用来显示头部文档,因此,在vim里,头部文档也是不可或缺的一部分

这里就直接修改.vimrc文件就可以实现相似的效果,在.vimrc文件的末尾添加如下几行代码

" add header comments "
autocmd BufNewFile *.[ch],*.js,*.cpp,*.c,*.py exec ":call SetTitle()"


func SetComment_ch()
    call setline(1, "/*")
    call setline(2, "* ===============================================")
    call setline(3, "* Filename: ".expand("%:t"))
    call setline(4, "* Description: ")
    call setline(5, "* Website: https://grimoire.cn")
    call setline(6, "* Copyright (c) ".strftime("%Y")." Mr.Sen. All rights reserved.")
    call setline(7, "* ===============================================")
    call setline(8, "*/")
endfunc

func SetTitle()
    if &filetype == 'cpp'
        call SetComment_ch()
        call setline(9, "")
        call setline(10, "#include <bits/stdc++.h>")
        call setline(11, "using namespace std;")
     elseif &filetype == 'javascript'
        call SetComment_ch()
    endif
endfunc

上述代码就是可以在生成新文件时,生成一个头部文档,大致理解一下,读者可以照猫画虎自己写一个

3.配置代码一键运行

个人感觉最重要的就是这个了,配置代码一键运行,就不用老是单独退出编辑器再在终端里面写编译指令之类的了

代码按照以下格式书写

" 一键编译运行 "
map <F5> :call CompileRunGcc()<CR>

func! CompileRunGcc()
    exec "w"
    if &filetype == 'c'
        exec '!g++ % -o %< && time ./%<'
    elseif &filetype == 'cpp'
        exec '!g++ % -o %< && time ./%<'
    elseif &filetype == 'python'
        exec '!time python3 %'
    elseif &filetype == 'javascript'
        exec '!time node %'
    endif
endfunc

当然,要让上面的代码正常运行,你还得安装g++等能运行你代码的编译器或者解释器之类的东西

上面的代码就已经将F5按键映射到了CompileRunGcc()函数上了,按一下F5就可以一键编译运行了

4.配置一键复制

因为博主本身有复制代码的需求,所以需要将vim里的代码复制到windows的系统剪贴板里,我测试过了大部分的网上的代码,都不能实现这个功能(“毕竟我这个是基于wsl的,并不是直接在linux环境下运行的”)
最后终于找到了一个可行的办法--使用:w !clip.exe指令

通过将键盘的F6映射到函数上,我实现了一键复制代码

" 复制代码 "
map <F6> :call CopyToBorad()<CR>

func CopyToBorad()
    exec ":w !clip.exe"
endfunc

5.先把坑开在这里吧

6.完整代码

et tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set noexpandtab 
set nu  
set autoindent 
set cindent
set clipboard=unnamed


" 一键编译运行 "
map <F5> :call CompileRunGcc()<CR>

func! CompileRunGcc()
        exec "w" 
    if &filetype == 'c' 
        exec '!g++ % -o %< && time ./%<'
    elseif &filetype == 'cpp'
        exec '!g++ % -o %< && time ./%<'
    elseif &filetype == 'python'
        exec '!time python3 %'
    elseif &filetype == 'javascript'
        exec '!time node %'
    endif                                                                              
endfunc
" add header comments "
autocmd BufNewFile *.[ch],*.js,*.cpp,*.c,*.py exec ":call SetTitle()" 

func SetComment_ch()
    call setline(1, "/*")
    call setline(2, "* ===============================================")
    call setline(3, "* Filename: ".expand("%:t"))
    call setline(4, "* Description: ")
    call setline(5, "* Website: https://grimoire.cn")
    call setline(6, "* Copyright (c) ".strftime("%Y")." Mr.Sen. All rights reserved.")
    call setline(7, "* ===============================================")
    call setline(8, "*/")
endfunc

func SetComment_sh()
    call setline(1, "'''")
    call setline(2, "* ===============================================")
    call setline(3, "* Filename: ".expand("%:t"))
    call setline(4, "* Description:")
    call setline(5, "* Website: https://grimoire.cn")
    call setline(6, "* Copyright (c) ".strftime("%Y")." Mr.Sen. All rights reserved.")
    call setline(7, "* ===============================================")
    call setline(8, "'''")
endfunc

func SetTitle()
    if &filetype == 'cpp'
        call SetComment_ch()
        call setline(9, "")
        call setline(10, "#include <bits/stdc++.h>")
        call setline(11, "using namespace std;")
        elseif &filetype == 'javascript'
        call SetComment_ch()
    elseif &filetype == 'python'
        call SetComment_sh()
    endif
endfunc


" 复制代码 "
map <F6> :call CopyToBorad()<CR>
func CopyToBorad()
    exec ":w !clip.exe"
endfunc
Archives Tip
QR Code for this page
Tipping QR Code