• ubuntu下使用Vim学习C++


    安装

    开发环境:

      系统:ubuntu 16.04LTS。

      工具:Vim7.4

      编译,链接,运行:g++

      现在贴上Vim的安装命令:
      

    sudo apt-get install vim-gtk
    //or 
    sudo apt-get install vim

    简易配置

    sudo vim /etc/vim/vimrc

    imput this in the last columns

    这里写代码片

    set nu                           // 在左侧行号
    set tabstop                  //tab 长度设置为 4
    set nobackup               //覆盖文件时不备份
    "set smartindent 
    set cursorline               //突出显示当前行
    set ruler                       //在右下角显示光标位置的状态行
    set autoindent             //自动缩进

    编译C++

    vim demo.cpp
    :wq
    g++ ./demo.cpp
    ./a.out

    配置Gvim/vim。

    用于Gvim 或 Vim 配置文件的一键编译与运行函数(注:需要机器上安装了GCC才行, minGW)
    本代码只加入了对C/C++的编译与运行,如果要加入其语言的可以参考此代码加入即可
    同时,本代码加入了对Windows下用Gvim编译UTF-8编码格式的源文件时中文乱码的解
    决方法(也就是在编译选项中加入了 “-fexec-charset=gbk”)。
    将上面的代码加入到_vimrc文件里即可

    "------------------------------------------------------------------------------
    "  < 判断操作系统是否是 Windows 还是 Linux >
    "------------------------------------------------------------------------------
    if(has("win32") || has("win64") || has("win95") || has("win16"))
        let g:iswindows = 1
    else
        let g:iswindows = 0
    endif
    
    "------------------------------------------------------------------------------
    "  < 判断是终端还是 Gvim >
    "------------------------------------------------------------------------------
    if has("gui_running")
        let g:isGUI = 1
    else
        let g:isGUI = 0
    endif
    
    "------------------------------------------------------------------------------
    "  < 编译、连接、运行配置 >
    "------------------------------------------------------------------------------
    " F9 一键保存、编译、连接存并运行
    map <F9> :call Run()<CR>
    imap <F9> <ESC>:call Run()<CR>
    
    " Ctrl + F9 一键保存并编译
    map <c-F9> :call Compile()<CR>
    imap <c-F9> <ESC>:call Compile()<CR>
    
    " Ctrl + F10 一键保存并连接
    map <c-F10> :call Link()<CR>
    imap <c-F10> <ESC>:call Link()<CR>
    
    let s:LastShellReturn_C = 0
    let s:LastShellReturn_L = 0
    let s:ShowWarning = 1
    let s:Obj_Extension = '.o'
    let s:Exe_Extension = '.exe'
    let s:Sou_Error = 0
    
    let s:windows_CFlags = 'gcc -fexec-charset=gbk -Wall -g -O0 -c % -o %<.o'
    let s:linux_CFlags = 'gcc -Wall -g -O0 -c % -o %<.o'
    
    let s:windows_CPPFlags = 'g++ -fexec-charset=gbk -Wall -g -O0 -c % -o %<.o'
    let s:linux_CPPFlags = 'g++ -Wall -g -O0 -c % -o %<.o'
    
    func! Compile()
        exe ":ccl"
        exe ":update"
        if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx"
            let s:Sou_Error = 0
            let s:LastShellReturn_C = 0
            let Sou = expand("%:p")
            let Obj = expand("%:p:r").s:Obj_Extension
            let Obj_Name = expand("%:p:t:r").s:Obj_Extension
            let v:statusmsg = ''
            if !filereadable(Obj) || (filereadable(Obj) && (getftime(Obj) < getftime(Sou)))
                redraw!
                if expand("%:e") == "c"
                    if g:iswindows
                        exe ":setlocal makeprg=".s:windows_CFlags
                    else
                        exe ":setlocal makeprg=".s:linux_CFlags
                    endif
                    echohl WarningMsg | echo " compiling..."
                    silent make
                elseif expand("%:e") == "cpp" || expand("%:e") == "cxx"
                    if g:iswindows
                        exe ":setlocal makeprg=".s:windows_CPPFlags
                    else
                        exe ":setlocal makeprg=".s:linux_CPPFlags
                    endif
                    echohl WarningMsg | echo " compiling..."
                    silent make
                endif
                redraw!
                if v:shell_error != 0
                    let s:LastShellReturn_C = v:shell_error
                endif
                if g:iswindows
                    if s:LastShellReturn_C != 0
                        exe ":bo cope"
                        echohl WarningMsg | echo " compilation failed"
                    else
                        if s:ShowWarning
                            exe ":bo cw"
                        endif
                        echohl WarningMsg | echo " compilation successful"
                    endif
                else
                    if empty(v:statusmsg)
                        echohl WarningMsg | echo " compilation successful"
                    else
                        exe ":bo cope"
                    endif
                endif
            else
                echohl WarningMsg | echo ""Obj_Name"is up to date"
            endif
        else
            let s:Sou_Error = 1
            echohl WarningMsg | echo " please choose the correct source file"
        endif
        exe ":setlocal makeprg=make"
    endfunc
    
    func! Link()
        call Compile()
        if s:Sou_Error || s:LastShellReturn_C != 0
            return
        endif
        let s:LastShellReturn_L = 0
        let Sou = expand("%:p")
        let Obj = expand("%:p:r").s:Obj_Extension
        if g:iswindows
            let Exe = expand("%:p:r").s:Exe_Extension
            let Exe_Name = expand("%:p:t:r").s:Exe_Extension
        else
            let Exe = expand("%:p:r")
            let Exe_Name = expand("%:p:t:r")
        endif
        let v:statusmsg = ''
        if filereadable(Obj) && (getftime(Obj) >= getftime(Sou))
            redraw!
            if !executable(Exe) || (executable(Exe) && getftime(Exe) < getftime(Obj))
                if expand("%:e") == "c"
                    setlocal makeprg=gcc -o %< %<.o
                    echohl WarningMsg | echo " linking..."
                    silent make
                elseif expand("%:e") == "cpp" || expand("%:e") == "cxx"
                    setlocal makeprg=g++ -o %< %<.o
                    echohl WarningMsg | echo " linking..."
                    silent make
                endif
                redraw!
                if v:shell_error != 0
                    let s:LastShellReturn_L = v:shell_error
                endif
                if g:iswindows
                    if s:LastShellReturn_L != 0
                        exe ":bo cope"
                        echohl WarningMsg | echo " linking failed"
                    else
                        if s:ShowWarning
                            exe ":bo cw"
                        endif
                        echohl WarningMsg | echo " linking successful"
                    endif
                else
                    if empty(v:statusmsg)
                        echohl WarningMsg | echo " linking successful"
                    else
                        exe ":bo cope"
                    endif
                endif
            else
                echohl WarningMsg | echo ""Exe_Name"is up to date"
            endif
        endif
        setlocal makeprg=make
    endfunc
    
    func! Run()
        let s:ShowWarning = 0
        call Link()
        let s:ShowWarning = 1
        if s:Sou_Error || s:LastShellReturn_C != 0 || s:LastShellReturn_L != 0
            return
        endif
        let Sou = expand("%:p")
        let Obj = expand("%:p:r").s:Obj_Extension
        if g:iswindows
            let Exe = expand("%:p:r").s:Exe_Extension
        else
            let Exe = expand("%:p:r")
        endif
        if executable(Exe) && getftime(Exe) >= getftime(Obj) && getftime(Obj) >= getftime(Sou)
            redraw!
            echohl WarningMsg | echo " running..."
            if g:iswindows
                exe ":!%<.exe"
            else
                if g:isGUI
                    exe ":!gnome-terminal -e ./%<"
                else
                    exe ":!./%<"
                endif
            endif
            redraw!
            echohl WarningMsg | echo " running finish"
        endif
    endfunc
  • 相关阅读:
    年轻人的第一个 Spring Boot 应用,太爽了!
    面试问我 Java 逃逸分析,瞬间被秒杀了。。
    Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
    坑爹的 Java 可变参数,把我整得够惨。。
    6月来了,Java还是第一!
    Eclipse 最常用的 10 组快捷键,个个牛逼!
    Spring Cloud Eureka 自我保护机制实战分析
    今天是 Java 诞生日,Java 24 岁了!
    厉害了,Dubbo 正式毕业!
    Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!
  • 原文地址:https://www.cnblogs.com/actanble/p/6713435.html
Copyright © 2020-2023  润新知