" __ __ __ ___
" | \/ |_ \ \ / (_)_ __ ___ _ __ ___
" | |\/| | | | \ \ / /| | '_ ` _ \| '__/ __|
" | | | | |_| |\ V / | | | | | | | | | (__
" |_| |_|\__, | \_/ |_|_| |_| |_|_| \___|
" |___/
" ===
" === Auto load for first time uses
" ===
" ===
" === color scheme
" ===
syntax enable
set background=dark
" Solarized theme terminal transparency
let g:solarized_termtrans = 1
" Use the Solarized theme
colorscheme solarized
let mapleader=" "
set number
set wrap
" Show the command you are typing in the lower-right corner of the screen (such as move, delete, etc.).
set showcmd
" Show a menu during command-line completion to make file or command selection easier.
set wildmenu
" Show relative line numbers
set relativenumber
" Highlight the current line
set cursorline
" Highlight all search results
set hlsearch
" Clear search highlighting
exec "nohlsearch"
" Highlight search matches as you type
set incsearch
" Ignore case when searching
set ignorecase
" Use case-sensitive search when the query contains uppercase letters
set smartcase
" Disable Vi compatibility mode and enable full Vim features
set nocompatible
" filetype on
" filetype indent on
" file plugin on
" file plugin indent on
set mouse=a
set encoding=utf-8
let &t_ut=''
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
set list
set listchars=tab:▸\ ,trail:▫
set scrolloff=5
set tw=0
set indentexpr=
set backspace=indent,eol,start
set foldmethod=indent
set foldlevel=99
" cursor
if $TERM_PROGRAM=~"iTerm"
let &t_SI="\<Esc>]50;CursorShape=1\x7" " === Vertical bar in insert mode
let &t_SR="\<Esc>]50;CursorShape=2\x7"
let &t_EI="\<Esc>]50;CursorShape=0\x7" " === Block in normal mode
endif
set autochdir
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
" Search
noremap <LEADER><CR> :nohlsearch<CR>
noremap = nzz
noremap - Nzz
" Duplicate words
map <LEADER>fd /\(\<\w\+\>\)\_s*\1
noremap K 5k
noremap J 5j
" noremap k i
" noremap K I
" noremap l u
" H key: go to the start of the line
noremap <C-h> 0
" L key: go to the end of the line
noremap <C-l> $
map s <nop>
map Q :q<CR>
map S :w<CR>
" map ; :
"
map sl :set splitright<CR>:vsplit<CR>
map sh :set nosplitright<CR>:vsplit<CR>
map sk :set nosplitbelow<CR>:split<CR>
map sj :set splitbelow<CR>:split<CR>
map <LEADER>l <C-w>l
map <LEADER>k <C-w>k
map <LEADER>h <C-w>h
map <LEADER>j <C-w>j
map <up> :res +5<CR>
map <down> :res -5<CR>
map <left> :vertical resize-5<CR>
map <right> :vertical resize+5<CR>
map tu :tabe<CR>
map th :-tabnext<CR>
map tl :+tabnext<CR>
map sv <C-w>t<C-w>H
map sh <C-w>t<C-w>K
" Call figlet
map tx :r !figlet
" Compile function
map r :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'c'
exec "!g++ % -o %<"
exec "!time ./%<"
elseif &filetype == 'cpp'
exec "!g++ % -o %<"
exec "!time ./%<"
elseif &filetype == 'java'
exec "!javac %"
exec "!time java %<"
elseif &filetype == 'sh'
:!time bash %
elseif &filetype == 'python'
silent! exec "!clear"
exec "!time python3 %"
elseif &filetype == 'html'
exec "!firefox % &"
elseif &filetype == 'markdown'
exec "MarkdownPreview"
elseif &filetype == 'vimwiki'
exec "MarkdownPreview"
endif
endfunc
map R :call CompileBuildrrr()<CR>
func! CompileBuildrrr()
exec "w"
if &filetype == 'vim'
exec "source $MYVIMRC"
elseif &filetype == 'markdown'
exec "echo"
endif
endfunc
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
" File navigation
Plug 'scrooloose/nerdtree',{ 'on': 'NERDTreeToggle' }
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'kien/ctrlp.vim', { 'on': 'CtrlP' }
" Taglist
Plug 'preservim/tagbar', { 'on': 'TagbarOpenAutoClose' }
" Error checking
Plug 'dense-analysis/ale'
" Auto Complete
" Plug 'Valloric/YouCompleteMe'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Plug 'davidhalter/jedi-vim'
" Undo Tree
Plug 'mbbill/undotree'
" Snippits
" Plug 'SirVer/ultisnips' , { 'for': ['vim-plug', 'python'] }
" Plug 'honza/vim-snippets', { 'for': ['vim-plug', 'python'] }
" Other visual enhancement
Plug 'nathanaelkane/vim-indent-guides'
Plug 'itchyny/vim-cursorword'
Plug 'tmhedberg/SimpylFold'
Plug 'mg979/vim-visual-multi', {'branch': 'master'}
" Git
Plug 'rhysd/conflict-marker.vim'
Plug 'tpope/vim-fugitive'
Plug 'mhinz/vim-signify'
Plug 'gisphm/vim-gitignore', { 'for': ['gitignore', 'vim-plug'] }
" HTML, CSS, JavaScript, PHP, JSON, etc.
Plug 'elzr/vim-json'
Plug 'hail2u/vim-css3-syntax'
Plug 'spf13/PIV', { 'for' :['php', 'vim-plug'] }
Plug 'gko/vim-coloresque', { 'for': ['vim-plug', 'php', 'html', 'javascript', 'css', 'less'] }
Plug 'pangloss/vim-javascript', { 'for' :['javascript', 'vim-plug'] }
Plug 'mattn/emmet-vim'
" Python
" Plug 'vim-scripts/indentpython.vim'
" Plug 'vim-python/python-syntax', { 'for' :['python', 'vim-plug'] }
" Markdown
Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install_sync() }, 'for' :['markdown', 'vim-plug'] }
Plug 'dhruvasagar/vim-table-mode', { 'on': 'TableModeToggle' }
Plug 'vimwiki/vimwiki'
" For general writing
Plug 'reedes/vim-wordy'
Plug 'ron89/thesaurus_query.vim'
" Bookmarks
Plug 'kshenoy/vim-signature'
" Other useful utilities
Plug 'jiangmiao/auto-pairs'
Plug 'terryma/vim-multiple-cursors'
Plug 'junegunn/goyo.vim' " distraction free writing mode
Plug 'ntpeters/vim-better-whitespace', { 'on': ['EnableWhitespace', 'ToggleWhitespace'] } "displays trailing whitespace (after :EnableWhitespace, vim slows down)
Plug 'tpope/vim-surround' " type ysks' to wrap the word with '' or type cs'` to change 'word' to `word`
Plug 'godlygeek/tabular' " type ;Tabularize /= to align the =
Plug 'gcmt/wildfire.vim' " in Visual mode, type i' to select all text in '', or type i) i] i} ip
Plug 'scrooloose/nerdcommenter' " in <space>cc to comment a line
" Dependencies
Plug 'MarcWeber/vim-addon-mw-utils'
Plug 'kana/vim-textobj-user'
Plug 'fadein/vim-FIGlet'
call plug#end()
" ===
" === Create a _machine_specific.vim file to adjust machine specific stuff, like python interpreter location
" ===
let has_machine_specific_file = 1
if empty(glob('~/.vim/_machine_specific.vim'))
let has_machine_specific_file = 0
exec "!cp ~/.vim/default_configs/_machine_specific_default.vim ~/.vim/_machine_specific.vim"
endif
source ~/.vim/_machine_specific.vim
" ===
" === NERDTree
" ===
map tt :NERDTreeToggle<CR>
let NERDTreeMapOpenExpl = ""
let NERDTreeMapUpdir = ""
let NERDTreeMapUpdirKeepOpen = "l"
let NERDTreeMapOpenSplit = ""
let NERDTreeOpenVSplit = ""
let NERDTreeMapActivateNode = "i"
let NERDTreeMapOpenInTab = "o"
let NERDTreeMapPreview = ""
let NERDTreeMapCloseDir = "n"
let NERDTreeMapChangeRoot = "y"
" ===
" === You Complete ME
" ===
nnoremap gd :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap g/ :YcmCompleter GetDoc<CR>
nnoremap gt :YcmCompleter GetType<CR>
nnoremap gr :YcmCompleter GoToReferences<CR>
let g:ycm_autoclose_preview_window_after_completion=0
let g:ycm_autoclose_preview_window_after_insertion=1
let g:ycm_use_clangd = 0
" let g:ycm_python_binary_path = g:ycm_python_interpreter_path
"let g:ycm_python_interpreter_path = system('which python3')
"let g:ycm_python_binary_path = system('which python3')
"let g:ycm_key_list_select_completion = ['<C-j>', '<C-n>', '<Down>']
"let g:ycm_key_list_previous_completion = ['<C-k>', '<C-p>', '<Up>']
" ===
" === vim-indent-guide
" ===
let g:indent_guides_guide_size = 1
let g:indent_guides_start_level = 2
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_color_change_percent = 1
silent! unmap <LEADER>ig
autocmd WinEnter * silent! unmap <LEADER>ig
" ===
" === ale
" ===
let b:ale_linters = [] "['pylint']
" let b:ale_fixers = ['autopep8', 'yapf']
let g:ale_python_pylint_options = "--extension-pkg-whitelist=pygame"
" ===
" === MarkdownPreview
" ===
let g:mkdp_auto_start = 0
let g:mkdp_auto_close = 1
let g:mkdp_refresh_slow = 0
let g:mkdp_command_for_global = 0
let g:mkdp_open_to_the_world = 0
let g:mkdp_open_ip = ''
let g:mkdp_browser = 'chromium'
let g:mkdp_echo_preview_url = 0
let g:mkdp_browserfunc = ''
let g:mkdp_preview_options = {
\ 'mkit': {},
\ 'katex': {},
\ 'uml': {},
\ 'maid': {},
\ 'disable_sync_scroll': 0,
\ 'sync_scroll_type': 'middle',
\ 'hide_yaml_meta': 1
\ }
let g:mkdp_markdown_css = ''
let g:mkdp_highlight_css = ''
let g:mkdp_port = ''
let g:mkdp_page_title = '「${name}」'
" ===
" === Python-syntax
" ===
" let g:python_highlight_all = 1
" let g:python_slow_sync = 0
" ===
" === Taglist
" ===
map <silent> T :TagbarOpenAutoClose<CR>
" ===
" === vim-table-mode
" ===
map <LEADER>tm :TableModeToggle<CR>
" ===
" === CtrlP
" ===
map <C-p> :CtrlP<CR>
" ===
" === vim-better-whitespace
" ===
let g:better_whitespace_enabled=0
" ===
" === Goyo
" ===
map <LEADER>gy :Goyo<CR>
" ===
" === CtrlP
" ===
let g:ctrlp_prompt_mappings = {
\ 'PrtSelectMove("j")': ['<c-e>', '<down>'],
\ 'PrtSelectMove("k")': ['<c-u>', '<up>'],
\ }
" ===
" === vim-signature
" ===
let g:SignatureMap = {
\ 'Leader' : "m",
\ 'PlaceNextMark' : "m,",
\ 'ToggleMarkAtLine' : "m.",
\ 'PurgeMarksAtLine' : "dm-",
\ 'DeleteMark' : "dm",
\ 'PurgeMarks' : "dm/",
\ 'PurgeMarkers' : "dm?",
\ 'GotoNextLineAlpha' : "m<LEADER>",
\ 'GotoPrevLineAlpha' : "",
\ 'GotoNextSpotAlpha' : "m<LEADER>",
\ 'GotoPrevSpotAlpha' : "",
\ 'GotoNextLineByPos' : "",
\ 'GotoPrevLineByPos' : "",
\ 'GotoNextSpotByPos' : "mn",
\ 'GotoPrevSpotByPos' : "mp",
\ 'GotoNextMarker' : "",
\ 'GotoPrevMarker' : "",
\ 'GotoNextMarkerAny' : "",
\ 'GotoPrevMarkerAny' : "",
\ 'ListLocalMarks' : "m/",
\ 'ListLocalMarkers' : "m?"
\ }
" ===
" === Undotree
" ===
let g:undotree_DiffAutoOpen = 0
map L :UndotreeToggle<CR>
" ===
" === UltiSnip
" ===
autocmd WinEnter * silent! iunmap <C-z>
autocmd WinEnter * silent! unmap <C-z>
autocmd WinEnter * silent! vunmap <C-z>
let g:UltiSnipsExpandTrigger = '<C-z>'
let g:UltiSnipsJumpForwardTrigger = '<C-z>'
"let g:UltiSnipsJumpBackwardTrigger = '<s-tab>'
" ==
" == NERDTree-git
" ==
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ "Unknown" : "?"
\ }
" Testring my own plugin
if !empty(glob('~/Github/vim-calc/vim-calc.vim'))
source ~/Github/vim-calc/vim-calc.vim
endif
" map <LEADER>a :call Calc()<CR>
" ==
" == vim-multiple-cursor
" ==
let g:multi_cursor_use_default_mapping=0
let g:multi_cursor_start_word_key = '<c-k>'
let g:multi_cursor_select_all_word_key = '<a-k>'
let g:multi_cursor_start_key = 'g<c-k>'
let g:multi_cursor_select_all_key = 'g<a-k>'
let g:multi_cursor_next_key = '<c-k>'
let g:multi_cursor_prev_key = '<c-p>'
let g:multi_cursor_skip_key = '<C-x>'
let g:multi_cursor_quit_key = '<Esc>'
let g:vimwiki_list = [{
\ 'automatic_nested_syntaxes':1,
\ 'path_html': '~/wiki_html',
\ 'path': '~/wiki',
\ 'template_path': '~/.vim/vimwiki/template/',
\ 'syntax': 'markdown',
\ 'ext':'.md',
\ 'template_default':'markdown',
\ 'custom_wiki2html': '~/.vim/vimwiki/wiki2html.sh',
\ 'template_ext':'.html'
\}]
au BufRead,BufNewFile *.md set filetype=vimwiki
let g:taskwiki_sort_orders={"C": "pri-"}
let g:taskwiki_syntax = 'markdown'
let g:taskwiki_markdown_syntax='markdown'
let g:taskwiki_markup_syntax='markdown'
" source ~/.vim/snippits.vim
" === Experimenting coc.nvim features
set timeoutlen=100
set cmdheight=2
inoremap <C-d> <Esc>:set cmdheight=2<CR>a
inoremap <C-t> <Esc>:set cmdheight=10<CR>a
nnoremap <C-d> :set cmdheight=2<CR>
nnoremap <C-t> :set cmdheight=10<CR>
set updatetime=1000
set shortmess+=c
set signcolumn=yes
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position.
" Coc only does snippet and additional edit on confirm.
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
" Use K to show documentation in preview window
nnoremap ? :call <SID>show_documentation()<CR>
function! s:show_documentation()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
else
call CocAction('doHover')
endif
endfunction
" Highlight symbol under cursor on CursorHold
autocmd CursorHold * silent call CocActionAsync('highlight')
"
" Open the _machine_specific.vim file if it has just been created
if has_machine_specific_file == 0
exec "e ~/.vim/_machine_specific.vim"
endif