-
Notifications
You must be signed in to change notification settings - Fork 0
/
nvim.vimrc
executable file
·230 lines (187 loc) · 7.02 KB
/
nvim.vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
" custom keys
let mapleader=" "
"Reload vimrc without quitting
map <leader>s :source ~/.vimrc<CR>
" ================ General Config ====================
set encoding=utf-8
set nocompatible "vim-specific settings, non-vi-compatible
set backspace=indent,eol,start "Allow backspace in insert mode
set number "Line numbers are good
set history=1000 "Store lots of :cmdline history
set mouse=nv " Allow mouse usage in normal and visual modes"
set showcmd "Show incomplete cmds down the bottom
set showmode "Show current mode down the bottom
set gcr=a:blinkon0 "Disable cursor blink
set visualbell "No sounds
set t_vb=
set autoread "Reload files changed outside vim
set lazyredraw "redraw only when we need to.
set showmatch "highlight matching [{()}]
set title "Set the terminal title
set ruler "Enable limited line numbering
"set spell spelllang=en_us
set modeline " Turn on modeline"
" This makes vim act like all other editors, buffers can
" exist in the background without being in a window.
" http://items.sjbach.com/319/configuring-vim-right
set hidden
set guioptions=a "hide scrollbars/menu/tabs"
" ================ Turn Off Swap Files ==============
set noswapfile
set nobackup
set nowb
" ================ Persistent Undo ==================
" Keep undo history across sessions, by storing in file.
" Only works all the time.
if has('persistent_undo')
let myUndoDir = expand('~'.'/.vim/backups')
call system('mkdir -p' . myUndoDir)
let &undodir = myUndoDir
set undofile
endif
" ================ Indentation ======================
set autoindent
set smartindent
set smarttab
set shiftwidth=2
set softtabstop=2
set tabstop=2
set expandtab
set relativenumber " relative numbering (Current line in line 0)"
filetype plugin on
filetype indent on
" Display tabs and trailing spaces visually
set list listchars=tab:\ \ ,trail:·
set wrap "Wrap lines
set linebreak "Wrap lines at convenient points
set textwidth=0 "Prevent Vim from automatically inserting line breaks
set wrapmargin=0
set formatoptions-=t "Don't change wrapping on existing lines
set formatoptions+=l "Black magic
" ================ Folds ============================
set foldmethod=syntax "fold based on indent
set foldlevel=9999 " Keep folds open by default"
set foldnestmax=3 "deepest fold is 3 levels
set nofoldenable "don't fold by default
" enable folding with the spacebar
nnoremap <space> za
" ================ Scrolling ========================
set scrolloff=8 "Start scrolling when we're 8 lines away from margins
set sidescrolloff=15
set sidescroll=1
" ================ Search ===========================
set incsearch " Find the next match as we type the search
set hlsearch " Highlight searches by default
set ignorecase " Ignore case when searching...
set smartcase " ...unless we type a capital
noremap <silent> <Esc> :nohlsearch<Bar>:echo<CR> " Cancel a search with escape
" Install Plugins
call plug#begin('~/.local/share/nvim/plugged')
" Themes
Plug 'vim-airline/vim-airline-themes'
Plug 'alessandroyorba/despacio'
Plug 'chriskempson/base16-vim'
" Markdown
Plug 'tpope/vim-markdown'
Plug 'junegunn/goyo.vim'
Plug 'shime/vim-livedown'
" Other Tools
Plug 'vim-airline/vim-airline' " Airline bar
Plug 'w0rp/ale' " syntax info
Plug 'Raimondi/delimitmate' " smart completion of delimiters
Plug 'vim-scripts/indentpython.vim'
Plug 'nvie/vim-flake8'
Plug 'ctrlpvim/ctrlp.vim'
Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
Plug 'flazz/vim-colorschemes'
Plug 'tpope/vim-surround'
Plug 'scrooloose/nerdcommenter'
Plug 'godlygeek/tabular'
Plug 'thanthese/Tortoise-Typing'
Plug 'kh3phr3n/python-syntax'
Plug 'dietsche/vim-lastplace'
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'davidhalter/jedi-vim'
call plug#end()
nnoremap ,; ;
nnoremap ; :
" # Plugin Settings
set laststatus=2 " Make airline status bar appear all the time
let g:airline#extensions#wordcount#enabled = 1 " Show word count
" Get rid of pointless Airline separators because I don't want to install a
" patched font to make them look right
let g:airline_left_sep=''
let g:airline_right_sep=''
let g:airline#extensions#tabline#enabled = 1 " Show buffers above"
" Remove existing autocommands to avoid duplicates
:autocmd!
"Force Airline to refresh after setup so settings work
:autocmd VimEnter * :AirlineRefresh
"turn on syntax highlighting
set background=dark
let python_highlight_all=1
syntax on
syntax enable
set t_Co=256
colorscheme woju
"split navigations
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>
" Remove whitespaces on exit
autocmd BufWritePre * :%s/\s\+$//e
"NerdTree Configuration
let NERDTreeShowHidden=1
nmap <leader>n :NERDTreeToggle<CR>
nmap <leader>j :NERDTreeFind<CR>
let NERDTreeIgnore=['\.pyc$', '\.DS_Store', '\~$', '\.swp']
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
"NerdCommenter
let g:NERDSpaceDelims = 1 " Add spaces after comment delimiters by default
let g:NERDCompactSexyComs = 1 " Use compact syntax for prettified multi-line comments
let g:NERDCommentEmptyLines = 1 " Allow commenting and inverting empty lines
let g:NERDTrimTrailingWhitespace = 1 " Enable trimming of trailing whitespace when uncommenting
" Highlight markdown
let g:markdown_fenced_languages = ['c', 'html', 'vim', 'python', 'bash=sh']
" LiveMarkdown Toggle Binding remap
nmap gm :LivedownToggle<CR>
" Python Indentation
au BufNewFile,BufRead *.py
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set textwidth=79 |
\ set expandtab |
\ set autoindent |
\ set fileformat=unix
"---------------------------HABIT--BREAKING----------------------------"
inoremap <left> <nop>
nnoremap <left> <nop>
inoremap <right> <nop>
nnoremap <right> <nop>
inoremap <up> <nop>
nnoremap <up> <nop>
inoremap <down> <nop>
nnoremap <down> <nop>
" comment current line with //
nmap // <leader>ci
" comment current selection with //
vmap // <leader>ci
" w!! force write with sudo even if forgot sudo vim
cmap w!! w !sudo tee > /dev/null %<CR>:e!<CR><CR>
" Easy Motion shortcut. Try it!
nmap ,, <leader><leader>s<Paste>
" Switch buffers with Tab and Shift-Tabnoremap
inoremap jk <Esc>
nnoremap <CR> o<Esc>
nnoremap <silent> <tab> mq:bnext<CR>`q
nnoremap <silent> <s-tab> mq:bprevious<CR>`
if argc() > 1
silent blast " load last buffer
silent bfirst " switch back to the first
endif
" spell checking and automatic wrapping at the recommended 72 columns to commit messages
autocmd Filetype gitcommit setlocal spell textwidth=72