1.7. Vim - Laptop¶
Vim is a contraction of Vi IMproved.
Vim is command-line driven.
Vim is highly customisable with many plugins.
1.7.1. Basic Vim¶
Insert text mode
ISave a file
:wLeave any mode
EscTo resource vimrc, set this in .bashrc:
export MYVIMRC="/home/andrew/.vimrc"
To resource (with tab completion):
:so $MYVIMRC
1.7.2. .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
" enable syntax highlighting:
syntax on
" autodetect filetypes:
filetype plugin indent on
" 256 colours in vim:
set t_Co=256
" colorcoloum color is dark grey not red:
highlight ColorColumn ctermbg=233 guibg=#808080
" NAVIGATION
" put cursor right to the bottom or top when scrolling:
set scrolloff=0
" fast terminal update
set ttyfast
1.7.2.1. xoria256¶
This file is located in
./vim/colorsand is called by .vimrcIn 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
" COLORS
" use colors/xoria256:
colorscheme xoria256
1.7.2.2. Pathogen¶
mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
Update .vimrc
" COLORS
execute pathogen#infect()
1.7.2.3. vimextensionopenfoam¶
The other color mapping I have is for OpenFOAM dictionaries, supplied by Tobias Holzmann:
https://bitbucket.org/shor-ty/vimextensionopenfoam/src/master/
1.7.2.4. 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 the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" All of your Plugins must be added before the following line
call vundle#end()
Load vim, run plugin installer and quit the file it shows
vim
:PluginInstall
:q
1.7.2.5. YouCompleteMe¶
My version of VIM = 7.4.1689 (laptop)
VIM version on desktop = 8.0
For autocompletion when typing
https://github.com/Valloric/YouCompleteMe#linux-64-bit
cd ~/.vim/bundle
git clone https://github.com/Valloric/YouCompleteMe.git
sudo apt install build-essential cmake python3-dev
cd ~/.vim/bundle/YouCompleteMe
git submodule update --init --recursive
./install.py --clangd-completer
Add to .vimrc in Vundle section:
Plugin 'Valloric/YouCompleteMe'
Install vim like for Vundle:
vim
:PluginInstall
:q
It wont find the clang interpreter, because it doesnt know
sudo apt-get install build-essential cmake
sudo apt-get install python-dev python3-dev
cd ~/.vim/bundle/YouCompleteMe
./install.py --clangd-completer
Install vim like for Vundle:
vim
:PluginInstall
:q
Also add the location of the flag configuration (i’m not using this one):
let g:ycm_global_ycm_extra_conf = '/home/andrew/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py'
There is an OpenFOAM completion version:
import os
import ycm_core
foam_app = os.environ['FOAM_APP']
foam_src = os.environ['FOAM_SRC']
# These are the compilation flags that will be used in case there's no
# compilation database set (by default, one is not set).
# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR.
flags = [
'-m64',
'-Dlinux64',
'-DWM_DP',
'-Wall',
'-Wextra',
'-Wno-unused-parameter',
'-Wold-style-cast',
'-Wnon-virtual-dtor',
'-DNoRepository',
'-Wno-unused-result',
'-ftemplate-depth-100',
'-std=c++11',
'-x',
'c++',
'-I' + foam_src + '/transportModels/',
'-I' + foam_app + '/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/'\
+ 'lnInclude',
'-I' + foam_src + '/transportModels/incompressible/lnInclude',
'-I' + foam_src + '/finiteVolume/lnInclude',
'-I' + foam_src + '/fvOptions/lnInclude',
'-I' + foam_src + '/OpenFOAM/lnInclude',
'-I./src/PBESystem/',
'-I.',
'-I' + foam_src + '/OSspecific/POSIX/lnInclude',
'-I./build/ext/gtest/src/googletest/include/'
]
compilation_database_folder = ''
if compilation_database_folder:
database = ycm_core.CompilationDatabase(compilation_database_folder)
else:
database = None
def DirectoryOfThisScript():
return os.path.dirname(os.path.abspath(__file__))
def MakeRelativePathsInFlagsAbsolute(flags, working_directory):
if not working_directory:
return list(flags)
new_flags = []
make_next_absolute = False
path_flags = ['-isystem', '-I', '-iquote', '--sysroot=']
for flag in flags:
new_flag = flag
if make_next_absolute:
make_next_absolute = False
if not flag.startswith('/'):
new_flag = os.path.join(working_directory, flag)
for path_flag in path_flags:
if flag == path_flag:
make_next_absolute = True
break
if flag.startswith(path_flag):
path = flag[len(path_flag):]
new_flag = path_flag + os.path.join(working_directory, path)
break
if new_flag:
new_flags.append(new_flag)
return new_flags
def FlagsForFile(filename):
if database:
# Bear in mind that compilation_info.compiler_flags_ does NOT return a
# python list, but a "list-like" StringVec object
compilation_info = database.GetCompilationInfoForFile( filename )
final_flags = MakeRelativePathsInFlagsAbsolute(
compilation_info.compiler_flags_,
compilation_info.compiler_working_dir_ )
# NOTE: This is just for YouCompleteMe; it's highly likely that your project
# does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR
# ycm_extra_conf IF YOU'RE NOT 100% YOU NEED IT.
#try:
#final_flags.remove( '-stdlib=libc++' )
#except ValueError:
#pass
else:
relative_to = DirectoryOfThisScript()
final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )
return {
'flags': final_flags,
'do_cache': True
}
Add the Openfoam completion without diagnostics (because diagnostics doesnt really work):
" OpenFOAM completion (enabled) - without diagnostics, with one character for completion
let g:ycm_global_ycm_extra_conf = '/home/andrew/.vim/bundle/YouCompleteMe/openfoamConfig/.ycm_extra_conf.py'
let g:ycm_enable_diagnostic_signs = 0
let g:ycm_enable_diagnostic_highlighting = 0
let g:ycm_min_num_of_chars_for_completion = 1
Question: How to get rid of ID when it just recognises repeated words?
Question: This doesnt really recogonise the language as far as I can tell, it just looks up libraries and then is consistent. How to regognise the language? maybe
./install.sh --clang-completer --system-clangTry this some other time:
http://www.alexeyshmalko.com/2014/youcompleteme-ultimate-autocomplete-plugin-for-vim/
cd ~/.vim/bundle
git clone https://github.com/Valloric/YouCompleteMe.git
cd YouCompleteMe
git submodule update --init --recursive
./install.sh --clang-completer --system-clang
1.7.2.6. Riv¶
This is used for restructred text (DONT USE IT).
" RST
Plugin 'Rykka/riv.vim'
For example, this command will create a quick html page:
:Riv2HtmlAndBrowse
I couldn’t get RST server to work (Plugin ‘Rykka/InstantRst’)
1.7.2.7. NERDTree¶
git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/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.7.2.8. AutoSave¶
- ” Autosave
Plugin ‘907th/vim-auto-save’
let g:auto_save = 1 ” enable AutoSave on Vim startup
1.7.2.9. Silver Searcher¶
apt-get install silversearcher-ag
1.7.2.10. Python docstring colours¶
Create a file:
~/.vim/after/syntax/python.vim
Add this to file:
syn region Comment start=/"""/ end=/"""/
1.7.2.11. VIM Obsession¶
To enable saving of sessions within .tmux.conf (VIM 8.0 and NERDTree do not mix)
cd ~/.vim/bundle
git clone git://github.com/tpope/vim-obsession.git
vim -u NONE -c "helptags vim-obsession/doc" -c q
1.7.2.12. VIM Sessions¶
To enable saving of sessions
1.7.2.13. VIM Environment¶
Top is VIM:
Top left: NERDTree
Top middle: OpenFOAM code
Top right: RST code
Bottom is TMUX:
Bottom left:
python -m http.serverBottom middle: OpenFOAM Run Directory
setBubble -noOverwriteBottom right, top: Compilation of OpenFOAM unicode
wclean,wmakeBottom right, bottom: Compilation of RST code
make html
How to start TMUX session
Start a Terminal Window (maximise window)
tmuxTo restore tmux session
ctrl+a, ctrl+rTo save a tmux session
ctrl+a, ctrl+sTo kill tmux server
ctrl+a, :kill-serverMove left
alt+hMove down
alt+jMove up
alt+kMove right
alt+lOpen split vertically
alt+vOpen split horizontally
alt+bClose split
alt+c
How to use VIM
(Save session)
:SaveSessionsession saved to ~/Session.vimMove left
ctrl+hMove down
ctrl+jMove up
ctrl+kMove right
ctrl+lClose file
:qTo intent text:
v, highlight text, >
NERDTree
Bookmark folder
:Bookmark(Highlight the folder in NERDTree)(Open file
owill 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
sopens to the left of open files)(Vertical split
iopens to the left and to the bottom on open files)Remove bookmark
cursor over bookmark,D, deletes bookmarkMake directory current
C
To reach a bookmark: cursor over bookmark and return to enter, or maybe second time, double click bookmark
Startup process (without saved sessions)
$ tmux
ctrl + a ctrl + r
vim (will also start NERDTree)
Shutdown process
ctrl + a : kill-server
Can save locations using TMUX (makesure VIM is closed)
ctrl + a ctrl + s