1.8. Vim - Desktop

1.8.1. VIM Environment

How to use VIM

  • (Save session) :SaveSession session saved to ~/Session.vim

  • Move left ctrl+h

  • Move down ctrl+j

  • Move up ctrl+k

  • Move right ctrl+l

  • Close file :q or ctrl+c

  • Move file ctrl+x

  • To intent text: v, highlight text, >

NERDTree

  • Bookmark folder :Bookmark (Highlight the folder in NERDTree)

  • (Open file o will overrite any previous open file, opens to the left of open files)

  • Open file over current file select window and left click on file

  • Horizontal split s opens to the left of open files

  • Vertical split i opens to the left and to the bottom on open files

  • Remove bookmark cursor over bookmark, D, deletes bookmark

  • Make directory current C

To reach a bookmark: cursor over bookmark and return to enter, or maybe second time, double click bookmark

Startup process

tmux
ctrl + a ctrl + r

Shutdown process

alt + x

1.8.2. Finished Environment

Top is VIM:

  • Top left: NERDTree

  • Top right: Code

Bottom is TMUX

../_images/vim_screen.png

1.8.3. Basic Vim

  • Insert text mode i

  • Save a file :w

  • Leave any mode Esc

  • To resource vimrc, set this in .bashrc:

export MYVIMRC="/home/andrew/.vimrc"
  • To resource (with tab completion): :so $MYVIMRC

1.8.4. .vimrc

Start with a basic .vimrc file:

"""""""""
" GENERAL
"""""""""
set t_ut=                       " background color erase
set number                          " show line numbers
set textwidth=80                " line length
set colorcolumn=+1              " show colour colum at line length
set tabstop=4           " tabs that appear 4 spaces wide
set clipboard=unnamed   " auto yank to clipboard

""""""""
" COLORS
""""""""
syntax on                                                                               " enable syntax highlighting
filetype plugin indent on                                               " autodetect filetypes
set t_Co=256                                                                    " 256 colours in vim

""""""""""""
" NAVIGATION
""""""""""""
set scrolloff=0         " put cursor right to the bottom or top when scrolling
set ttyfast                     " fast terminal update

1.8.5. xoria256

  • This file is located in ./vim/colors and is called by .vimrc

  • In my opinion the colours are quite good

  • This operates with (e.g.) all C++ files

" Vim color file
"
" Name:       xoria256.vim
" Version:    1.6
" Maintainer:       Dmitriy Y. Zotikov (xio) <xio@ungrund.org>
"
" Should work in recent 256 color terminals.  88-color terms like urxvt are
" NOT supported.
"
" Don't forget to install 'ncurses-term' and set TERM to xterm-256color or
" similar value.
"
" Color numbers (0-255) see:
" http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html
"
" For a specific filetype highlighting rules issue :syntax list when a file of
" that type is opened.
"
" TODO: link colours instead of setting values explicitly

" Initialization {{{
if &t_Co != 256 && ! has("gui_running")
  echoerr "Please use GUI or a 256-color terminal (which sets t_Co=256)."
  finish
endif

set background=dark

hi clear

if exists("syntax_on")
  syntax reset
endif

let colors_name = "xoria256"
"}}}
" Colours {{{1
"" General {{{2
hi Normal       ctermfg=252 guifg=#d0d0d0 ctermbg=234 guibg=#1c1c1c cterm=none gui=none
hi Cursor                                 ctermbg=214 guibg=#ffaf00
hi CursorColumn                           ctermbg=238 guibg=#444444
hi CursorLine                             ctermbg=237 guibg=#3a3a3a cterm=none gui=none
hi Error        ctermfg=15  guifg=#ffffff ctermbg=1   guibg=#800000
hi ErrorMsg     ctermfg=15  guifg=#ffffff ctermbg=1   guibg=#800000
hi FoldColumn   ctermfg=247 guifg=#9e9e9e ctermbg=233 guibg=#121212
hi Folded       ctermfg=255 guifg=#eeeeee ctermbg=60  guibg=#5f5f87
hi IncSearch    ctermfg=0   guifg=#000000 ctermbg=223 guibg=#ffdfaf cterm=none gui=none
hi LineNr       ctermfg=247 guifg=#9e9e9e ctermbg=233 guibg=#121212
hi MatchParen   ctermfg=188 guifg=#dfdfdf ctermbg=68  guibg=#5f87df cterm=bold gui=bold
" TODO
" hi MoreMsg
hi NonText      ctermfg=247 guifg=#9e9e9e ctermbg=233 guibg=#121212 cterm=bold gui=bold
hi Pmenu        ctermfg=0   guifg=#000000 ctermbg=250 guibg=#bcbcbc
hi PmenuSel     ctermfg=255 guifg=#eeeeee ctermbg=243 guibg=#767676
hi PmenuSbar                              ctermbg=252 guibg=#d0d0d0
hi PmenuThumb   ctermfg=243 guifg=#767676
hi Search       ctermfg=0   guifg=#000000 ctermbg=149 guibg=#afdf5f
hi SignColumn   ctermfg=248 guifg=#a8a8a8
hi SpecialKey   ctermfg=77  guifg=#5fdf5f
" hi SpellBad     ctermfg=160 guifg=fg      ctermbg=bg                cterm=underline               guisp=#df0000
hi SpellBad                               ctermbg=238                                               guisp=#df0000
hi SpellCap     ctermfg=189 guifg=#dfdfff ctermbg=bg  guibg=bg      cterm=underline gui=underline
hi SpellRare    ctermfg=168 guifg=#df5f87 ctermbg=bg  guibg=bg      cterm=underline gui=underline
hi SpellLocal   ctermfg=98  guifg=#875fdf ctermbg=bg  guibg=bg      cterm=underline gui=underline
hi StatusLine   ctermfg=15  guifg=#ffffff ctermbg=239 guibg=#4e4e4e cterm=bold gui=bold
hi StatusLineNC ctermfg=249 guifg=#b2b2b2 ctermbg=237 guibg=#3a3a3a cterm=none gui=none
hi TabLine      ctermfg=fg  guifg=fg      ctermbg=242 guibg=#666666 cterm=none gui=none
hi TabLineFill  ctermfg=fg  guifg=fg      ctermbg=237 guibg=#3a3a3a cterm=none gui=none
" FIXME
hi Title        ctermfg=225 guifg=#ffdfff
hi Todo         ctermfg=0   guifg=#000000 ctermbg=184 guibg=#dfdf00
hi Underlined   ctermfg=39  guifg=#00afff                           cterm=underline gui=underline
hi VertSplit    ctermfg=237 guifg=#3a3a3a ctermbg=237 guibg=#3a3a3a cterm=none gui=none
" hi VIsualNOS    ctermfg=24  guifg=#005f87 ctermbg=153 guibg=#afdfff cterm=none gui=none
" hi Visual       ctermfg=24  guifg=#005f87 ctermbg=153 guibg=#afdfff
hi Visual       ctermfg=255 guifg=#eeeeee ctermbg=96  guibg=#875f87
" hi Visual       ctermfg=255 guifg=#eeeeee ctermbg=24  guibg=#005f87
hi VisualNOS    ctermfg=255 guifg=#eeeeee ctermbg=60  guibg=#5f5f87
hi WildMenu     ctermfg=0   guifg=#000000 ctermbg=150 guibg=#afdf87 cterm=bold gui=bold

"" Syntax highlighting {{{2
hi Comment      ctermfg=244 guifg=#808080
hi Constant     ctermfg=229 guifg=#ffffaf
hi Identifier   ctermfg=182 guifg=#dfafdf                           cterm=none
hi Ignore       ctermfg=238 guifg=#444444
hi Number       ctermfg=180 guifg=#dfaf87
hi PreProc      ctermfg=150 guifg=#afdf87
hi Special      ctermfg=174 guifg=#df8787
hi Statement    ctermfg=110 guifg=#87afdf                           cterm=none gui=none
hi Type         ctermfg=146 guifg=#afafdf                           cterm=none gui=none

"" Special {{{2
""" .diff {{{3
hi diffAdded    ctermfg=150 guifg=#afdf87
hi diffRemoved  ctermfg=174 guifg=#df8787
""" vimdiff {{{3
hi diffAdd      ctermfg=bg  guifg=bg      ctermbg=151 guibg=#afdfaf
"hi diffDelete   ctermfg=bg  guifg=bg      ctermbg=186 guibg=#dfdf87 cterm=none gui=none
hi diffDelete   ctermfg=bg  guifg=bg      ctermbg=246 guibg=#949494 cterm=none gui=none
hi diffChange   ctermfg=bg  guifg=bg      ctermbg=181 guibg=#dfafaf
hi diffText     ctermfg=bg  guifg=bg      ctermbg=174 guibg=#df8787 cterm=none gui=none
""" HTML {{{3
" hi htmlTag      ctermfg=146  guifg=#afafdf
" hi htmlEndTag   ctermfg=146  guifg=#afafdf
hi htmlTag      ctermfg=244
hi htmlEndTag   ctermfg=244
hi htmlArg  ctermfg=182  guifg=#dfafdf
hi htmlValue        ctermfg=187  guifg=#dfdfaf
hi htmlTitle        ctermfg=254  ctermbg=95
" hi htmlArg        ctermfg=146
" hi htmlTagName    ctermfg=146
" hi htmlString     ctermfg=187
""" XML {{{3
hi link xmlTagName  Statement
" hi link xmlTag            Comment
" hi link xmlEndTag Statement
hi link xmlTag              xmlTagName
hi link xmlEndTag   xmlTag
hi link xmlAttrib   Identifier
""" django {{{3
hi djangoVarBlock ctermfg=180  guifg=#dfaf87
hi djangoTagBlock ctermfg=150  guifg=#afdf87
hi djangoStatement ctermfg=146  guifg=#afafdf
hi djangoFilter ctermfg=174  guifg=#df8787
""" python {{{3
hi pythonExceptions ctermfg=174
""" NERDTree {{{3
hi Directory      ctermfg=110  guifg=#87afdf
hi treeCWD        ctermfg=180  guifg=#dfaf87
hi treeClosable   ctermfg=174  guifg=#df8787
hi treeOpenable   ctermfg=150  guifg=#afdf87
hi treePart       ctermfg=244  guifg=#808080
hi treeDirSlash   ctermfg=244  guifg=#808080
hi treeLink       ctermfg=182  guifg=#dfafdf
""" rst #{{{3
hi link rstEmphasis Number

""" VimDebug {{{3
" FIXME
" you may want to set SignColumn highlight in your .vimrc
" :help sign
" :help SignColumn

" hi currentLine term=reverse cterm=reverse gui=reverse
" hi breakPoint  term=NONE    cterm=NONE    gui=NONE
" hi empty       term=NONE    cterm=NONE    gui=NONE

" sign define currentLine linehl=currentLine
" sign define breakPoint  linehl=breakPoint  text=>>
" sign define both        linehl=currentLine text=>>
" sign define empty       linehl=empty
""" vimHelp {{{3
hi link helpExample Number
hi link helpNumber String
hi helpURL ctermfg=110 guifg=#87afdf                           cterm=underline gui=underline
hi link helpHyperTextEntry helpURL

Update .vimrc

"""""""
" XORIA
"""""""
colorscheme xoria256                                                                                                                            " Xoria
highlight Type ctermfg=182  guifg=#dfafdf                                                                                       " Tweak Xoria
hi Normal ctermfg=15 guifg=#ffffff ctermbg=232 guibg=#080808 cterm=none gui=none        " Tweak Xoria
highlight ColorColumn ctermbg=233 guibg=#121212                                                                         " Colorcoloum color is dark grey not red

1.8.6. Vundle

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

put this in .vimrc

""""""""
" VUNDLE
""""""""
set nocompatible                        " be iMproved, required
filetype off                            " required
set rtp+=~/.vim/bundle/Vundle.vim       " set the runtime path to include Vundle and initialize
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'           " let Vundle manage Vundle, required
call vundle#end()                                       " All of your Plugins must be added before the following line

Load vim, run plugin installer and quit the file it shows

vim
:PluginInstall
:q

1.8.7. OpenFOAM dictionaries

call vundle#begin()                                     " Start Vundle
Plugin 'lervag/vim-foam'                        " OpenFOAM dictionary highlighting
call vundle#end()                                       " All of your Plugins must be added before the following line

1.8.8. NERDTree

Plugin 'scrooloose/nerdtree'            " NERDTree

NERDTree commands:

  • :NERDTree - starts a new nerd tree window

  • :NERDTreeClose - closes NerdTree

From within NERDTree:

  • o - opens a file or directory

  • go - opens file but keeps you in NERDTree

  • x - closes a directory

  • C - change root to current directory

  • ? - Toggle help

Split screen:

  • Ctrl+ww cycle though all windows

  • Ctrl+wh takes you left a window

  • Ctrl+wj takes you down a window

  • Ctrl+wk takes you up a window

  • Ctrl+wl takes you right a window

  • i - open file with split horizontal pane

  • s - open file with split vertical pane

1.8.9. Python docstring colours

Create a file:

~/.vim/after/syntax/python.vim

Add this to file:

syn region Comment start=/"""/ end=/"""/

1.8.10. VIM Sessions

To enable saving of sessions

Plugin 'xolox/vim-misc'                         " Required for Vim session
Plugin 'xolox/vim-session'                      " Vim Session

1.8.11. Terminal

Background for terminal

Color to #080808

1.8.12. VIMRC

""""""""
" VUNDLE
""""""""
set nocompatible                        " be iMproved, required
filetype off                            " required
set rtp+=~/.vim/bundle/Vundle.vim       " set the runtime path to include Vundle and initialize
call vundle#begin()                                     " Start Vundle
Plugin 'VundleVim/Vundle.vim'           " let Vundle manage Vundle, required
Plugin 'lervag/vim-foam'                        " OpenFOAM dictionary highlighting
Plugin 'scrooloose/nerdtree'            " NERDTree
Plugin 'xolox/vim-misc'                         " Required for Vim session
Plugin 'xolox/vim-session'                      " Vim Session
call vundle#end()                                       " All of your Plugins must be added before the following line

"""""""""
" GENERAL
"""""""""
set t_ut=                       " background color erase
set number                          " show line numbers
set textwidth=80                " line length
set colorcolumn=+1              " show colour colum at line length
set tabstop=4           " tabs that appear 4 spaces wide
set clipboard=unnamed   " auto yank to clipboard

""""""""
" COLORS
""""""""
syntax on                                                                               " enable syntax highlighting
filetype plugin indent on                                               " autodetect filetypes
set t_Co=256                                                                    " 256 colours in vim

""""""""""""
" NAVIGATION
""""""""""""
set scrolloff=0         " put cursor right to the bottom or top when scrolling
set ttyfast                     " fast terminal update

""""""""""
" NERDTREE
""""""""""
set mouse=a                                     " NERDTree mouse
let g:NERDTreeMouseMode=3               " NERDTree mouse - single click opens node
let NERDTreeShowBookmarks=1             " NERDTree bookmarks

"""""""
" XORIA
"""""""
colorscheme xoria256                                                                                                                            " Xoria
highlight Type ctermfg=182  guifg=#dfafdf                                                                                       " Tweak Xoria
hi Normal ctermfg=15 guifg=#ffffff ctermbg=232 guibg=#080808 cterm=none gui=none        " Tweak Xoria
highlight ColorColumn ctermbg=233 guibg=#121212                                                                         " Colorcoloum color is dark grey not red

""""""""""""""
" VIM SESSIONS
""""""""""""""
:let g:session_directory = "~"
:let g:session_autosave = 'no'
:let g:session_default_name = 'Session'
:let g:session_autoload = 'no'

"""""""
" MOUSE
"""""""
set mouse+=a
if &term =~ '^screen'
        " tmux knows the extended mouse mode
        set ttymouse=xterm2
endif

"""""""""""""
" KEY PRESSES
"""""""""""""
"moving between panes:
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

"close pane
nnoremap <C-C> <C-W><C-C>

"move panes
nnoremap <C-X> <C-W><C-X>