zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    java list随机截取(洗牌)
    LINUX安装Docker及Portainer可视化界面
    总结一些选题
    深入理解BIO、NIO、AIO
    InnoDB和MyISAM存储引擎的区别
    MyBatis的解析和运行原理
    [杂项/无聊向]《美食大战老鼠》强卡最优策略搜索代码(非玩家勿入)
    CSP 2019 游记
    NOI 2019 游记
    Comet OJ
  • 原文地址:https://www.cnblogs.com/actanble/p/6713435.html
Copyright © 2011-2022 走看看