diff options
Diffstat (limited to 'vim/init')
-rw-r--r-- | vim/init/basic.vim | 65 | ||||
-rw-r--r-- | vim/init/config.vim | 1 | ||||
-rw-r--r-- | vim/init/keymaps.vim | 230 |
3 files changed, 168 insertions, 128 deletions
diff --git a/vim/init/basic.vim b/vim/init/basic.vim index a54bf59..c066f07 100644 --- a/vim/init/basic.vim +++ b/vim/init/basic.vim | |||
@@ -12,8 +12,10 @@ augroup filetype_vim | |||
12 | execute "autocmd FileType vim :inoreabbrev <buffer> --- ----------------{".."{{" | 12 | execute "autocmd FileType vim :inoreabbrev <buffer> --- ----------------{".."{{" |
13 | autocmd FileType vim setlocal foldmethod=marker foldlevel=0 | 13 | autocmd FileType vim setlocal foldmethod=marker foldlevel=0 |
14 | augroup END | 14 | augroup END |
15 | |||
15 | " }}} | 16 | " }}} |
16 | " GERERNAL ----------------{{{ | 17 | " GERERNAL ----------------{{{ |
18 | |||
17 | let mapleader = "," " Always use comma as leader key | 19 | let mapleader = "," " Always use comma as leader key |
18 | set nocompatible " Disable vi compatible, today is 20XX | 20 | set nocompatible " Disable vi compatible, today is 20XX |
19 | set path=.,** " Allow :find with completion | 21 | set path=.,** " Allow :find with completion |
@@ -32,6 +34,7 @@ filetype plugin indent on | |||
32 | " Unnamed buffer like CmdWindows should prevent this | 34 | " Unnamed buffer like CmdWindows should prevent this |
33 | set autoread | 35 | set autoread |
34 | autocmd FocusGained,BufEnter .* checktime | 36 | autocmd FocusGained,BufEnter .* checktime |
37 | |||
35 | " }}} | 38 | " }}} |
36 | " VISUAL ----------------{{{ | 39 | " VISUAL ----------------{{{ |
37 | 40 | ||
@@ -64,14 +67,12 @@ set wildmenu wildoptions=pum,fuzzy | |||
64 | " Format of error message | 67 | " Format of error message |
65 | set errorformat+=[%f:%l]\ ->\ %m,[%f:%l]:%m | 68 | set errorformat+=[%f:%l]\ ->\ %m,[%f:%l]:%m |
66 | 69 | ||
67 | " 顯示分隔符號 | ||
68 | set listchars=tab:\|\ ,trail:.,extends:>,precedes:< | ||
69 | |||
70 | " }}} | 70 | " }}} |
71 | " EDIT ----------------{{{ | 71 | " EDIT ----------------{{{ |
72 | 72 | ||
73 | set backspace=eol,start,indent " Set Backspace behaviors | 73 | set backspace=eol,start,indent " Set Backspace behaviors |
74 | set autoindent " If current line has indent, automatically set indent for next line | 74 | set autoindent smartindent |
75 | set shiftwidth=2 | ||
75 | set cindent | 76 | set cindent |
76 | set ttimeout | 77 | set ttimeout |
77 | set ttimeoutlen=50 | 78 | set ttimeoutlen=50 |
@@ -80,14 +81,14 @@ set ttimeoutlen=50 | |||
80 | 81 | ||
81 | imap <C-c> <Esc>l | 82 | imap <C-c> <Esc>l |
82 | 83 | ||
83 | " TABSIZE ----------------{{{ | 84 | " TAB ----------------{{{ |
84 | 85 | ||
85 | set expandtab | 86 | set expandtab |
86 | set shiftwidth=2 | 87 | set softtabstop=-1 |
87 | set autoindent | 88 | |
88 | set tabstop=4 | 89 | " 顯示分隔符號 |
89 | set softtabstop=0 | 90 | set list |
90 | set smartindent | 91 | set listchars=tab:▷▷,extends:>,precedes:< |
91 | 92 | ||
92 | " }}} | 93 | " }}} |
93 | 94 | ||
@@ -99,39 +100,15 @@ set suffixesadd=.md " Enable reference markdown file without extension | |||
99 | 100 | ||
100 | " }}} | 101 | " }}} |
101 | " SEARCH ----------------{{{ | 102 | " SEARCH ----------------{{{ |
102 | set ignorecase " Search case without case sensation | 103 | |
104 | set ignorecase " Search case without case sensation | ||
103 | set smartcase | 105 | set smartcase |
104 | set hlsearch " Hilight all matched texts | 106 | set hlsearch " Hilight all matched texts |
105 | set incsearch " Show matched strings when typing | 107 | set incsearch " Show matched strings when typing |
108 | |||
106 | " }}} | 109 | " }}} |
107 | " BUFFERS ----------------{{{ | 110 | " BUFFERS ----------------{{{ |
108 | 111 | ||
109 | " Use <C-c> to quit the last buffer ----------------{{{ | ||
110 | let g:quitVimWhenPressingCtrlC = 1 | ||
111 | function! ToggleQuit() | ||
112 | let g:quitVimWhenPressingCtrlC = g:quitVimWhenPressingCtrlC ? 0 : 1 | ||
113 | let message = g:quitVimWhenPressingCtrlC ? "Unlock" : "Lock" | ||
114 | echo message | ||
115 | endfunction | ||
116 | |||
117 | nnoremap <leader><leader>gl :call ToggleQuit()<CR> | ||
118 | |||
119 | function! Bye() | ||
120 | if len(getbufinfo({'buflisted': 1})) == 1 && len(getwininfo()) == 1 | ||
121 | if g:quitVimWhenPressingCtrlC | ||
122 | :silent! quit | ||
123 | else | ||
124 | :echo "Press <leader><leader>gl to allow quit with <C-c>" | ||
125 | endif | ||
126 | else | ||
127 | :bdelete | ||
128 | endif | ||
129 | endfunction | ||
130 | |||
131 | " Ctrl-C rules!!! | ||
132 | nnoremap <silent> <C-c> :call Bye()<CR> | ||
133 | |||
134 | " }}} | ||
135 | " Go to last cursor position ----------------{{{ | 112 | " Go to last cursor position ----------------{{{ |
136 | augroup vimStartup | 113 | augroup vimStartup |
137 | au! | 114 | au! |
@@ -141,7 +118,7 @@ augroup vimStartup | |||
141 | " (it's likely a different one than last time). | 118 | " (it's likely a different one than last time). |
142 | autocmd BufReadPost * | 119 | autocmd BufReadPost * |
143 | \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' | 120 | \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' |
144 | \ | exe "normal! g`\"" | 121 | \ | exe "normal! g`\"zv" |
145 | \ | endif | 122 | \ | endif |
146 | augroup END | 123 | augroup END |
147 | 124 | ||
@@ -158,10 +135,12 @@ if has('multi_byte') | |||
158 | endif | 135 | endif |
159 | 136 | ||
160 | " }}} | 137 | " }}} |
161 | " FOLDING ----------------{{{ | 138 | " FOLD ----------------{{{ |
139 | |||
162 | set foldenable " Allow fold | 140 | set foldenable " Allow fold |
163 | set foldmethod=indent " Fold contents by indent | 141 | set foldmethod=indent " Fold contents by indent |
164 | set foldlevel=2 | 142 | set foldlevel=2 |
143 | |||
165 | " }}} | 144 | " }}} |
166 | " BACKUP ----------------{{{ | 145 | " BACKUP ----------------{{{ |
167 | 146 | ||
@@ -176,8 +155,10 @@ set backupdir=~/.vim/tmp | |||
176 | 155 | ||
177 | " backup when write file | 156 | " backup when write file |
178 | set writebackup | 157 | set writebackup |
158 | |||
179 | " }}} | 159 | " }}} |
180 | " HIGHLIGHT ----------------{{{ | 160 | " HIGHLIGHT ----------------{{{ |
161 | |||
181 | syntax enable | 162 | syntax enable |
182 | set conceallevel=1 | 163 | set conceallevel=1 |
183 | 164 | ||
@@ -186,6 +167,7 @@ function! GetHighlightGroupName() | |||
186 | let l:groupName = synIDattr(l:syntaxID, 'name') | 167 | let l:groupName = synIDattr(l:syntaxID, 'name') |
187 | echo "Highlight Group Name: " . l:groupName | 168 | echo "Highlight Group Name: " . l:groupName |
188 | endfunction | 169 | endfunction |
170 | nnoremap <leader>H :call GetHighlightGroupName()<CR> | ||
189 | 171 | ||
190 | " Defualt highlight for matched parenthesis is so weird in many colorscheme | 172 | " Defualt highlight for matched parenthesis is so weird in many colorscheme |
191 | " Why the background color is lighter than my caret !? | 173 | " Why the background color is lighter than my caret !? |
@@ -203,6 +185,7 @@ highlight MultiLineHighlight ctermbg=LightYellow guibg=LightYellow ctermfg=Black | |||
203 | nnoremap <silent> <leader>gh :call matchadd('MultiLineHighlight', '\%'.line('.').'l')<CR> | 185 | nnoremap <silent> <leader>gh :call matchadd('MultiLineHighlight', '\%'.line('.').'l')<CR> |
204 | " clear all the highlighted lines | 186 | " clear all the highlighted lines |
205 | nnoremap <silent> <leader>gH :call clearmatches()<CR> | 187 | nnoremap <silent> <leader>gH :call clearmatches()<CR> |
188 | |||
206 | " }}} | 189 | " }}} |
207 | " MISC ----------------{{{ | 190 | " MISC ----------------{{{ |
208 | 191 | ||
diff --git a/vim/init/config.vim b/vim/init/config.vim index ae623ec..074f09d 100644 --- a/vim/init/config.vim +++ b/vim/init/config.vim | |||
@@ -6,6 +6,7 @@ | |||
6 | " Unnamed Buffer ----------------{{{ | 6 | " Unnamed Buffer ----------------{{{ |
7 | 7 | ||
8 | augroup DeleteUnnamedEmptBuffer! | 8 | augroup DeleteUnnamedEmptBuffer! |
9 | au! | ||
9 | au BufLeave {} if getline(1, '$') == [''] | setlocal bufhidden=wipe | endif | 10 | au BufLeave {} if getline(1, '$') == [''] | setlocal bufhidden=wipe | endif |
10 | augroup END | 11 | augroup END |
11 | 12 | ||
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index f46e67b..38bdd0e 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim | |||
@@ -1,7 +1,6 @@ | |||
1 | "====================================================================== | 1 | "====================================================================== |
2 | " Only for key mapping | 2 | " Only for key mapping |
3 | "====================================================================== | 3 | "====================================================================== |
4 | " vim: set ts=4 sw=4 tw=78 noet : | ||
5 | 4 | ||
6 | " COMMON_MAPPING ----------------{{{ | 5 | " COMMON_MAPPING ----------------{{{ |
7 | 6 | ||
@@ -14,29 +13,22 @@ vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR> | |||
14 | " Disable highlight when <leader><CR> is pressed | 13 | " Disable highlight when <leader><CR> is pressed |
15 | map <silent> <leader><CR> :noh<CR> | 14 | map <silent> <leader><CR> :noh<CR> |
16 | 15 | ||
17 | " Paste register 0 | 16 | " Set wrap |
18 | nnoremap <C-p> "0p | 17 | nnoremap <leader>W :set wrap!<CR>:set wrap?<CR> |
19 | 18 | ||
20 | " Fast saving | 19 | " Fast saving |
21 | nmap <leader>w :w!<CR> | 20 | nmap <leader>w :w!<CR> |
22 | 21 | ||
22 | " :W sudo saves the file | ||
23 | " (useful for handling the permission-denied error) | ||
24 | command! W execute 'w !sudo -S tee %' <bar> edit! | ||
25 | |||
23 | " Fast quit with error | 26 | " Fast quit with error |
24 | nmap <leader>q :q<CR> | 27 | nmap <leader>q :q<CR> |
25 | 28 | ||
26 | " Fast quit with error | 29 | " Fast quit with error |
27 | nmap cq :cq<CR> | 30 | nmap cq :cq<CR> |
28 | 31 | ||
29 | " Switch wrap | ||
30 | nmap <leader>W :set wrap!<CR> | ||
31 | |||
32 | " :W sudo saves the file | ||
33 | " (useful for handling the permission-denied error) | ||
34 | command! W execute 'w !sudo -S tee %' <bar> edit! | ||
35 | |||
36 | " Enter to open file | ||
37 | nnoremap <CR> gf | ||
38 | nnoremap gF :e <cfile><CR> | ||
39 | |||
40 | " Remap <CR> in Quickfix, Cmdwin Location list | 32 | " Remap <CR> in Quickfix, Cmdwin Location list |
41 | augroup vimrc_CRfix | 33 | augroup vimrc_CRfix |
42 | au! | 34 | au! |
@@ -49,13 +41,25 @@ augroup END | |||
49 | " nnoremap <leader>, :terminal ++noclose<CR> | 41 | " nnoremap <leader>, :terminal ++noclose<CR> |
50 | vnoremap <leader>, :terminal<CR> | 42 | vnoremap <leader>, :terminal<CR> |
51 | 43 | ||
44 | " Paste register 0 | ||
45 | nnoremap <C-p> "0p | ||
46 | |||
52 | " Toggle paste mode on and off | 47 | " Toggle paste mode on and off |
53 | map <leader>pp :setlocal paste!<CR> | 48 | map <leader>pp :setlocal paste!<CR> |
54 | 49 | ||
50 | " Copy from system clipboard | ||
51 | nnoremap <leader>P :r !xsel -ob<CR> | ||
52 | vnoremap Y :w !xsel -ib<CR> | ||
53 | |||
55 | " Switch CWD to the directory of the open buffer | 54 | " Switch CWD to the directory of the open buffer |
56 | nnoremap cd :cd %:p:h<CR>:pwd<CR> | 55 | nnoremap cd :cd %:p:h<CR>:pwd<CR> |
57 | " Switch CWD to root git directory | 56 | " Switch CWD to root git directory |
58 | nnoremap cdg :execute 'cd' fnameescape(fnamemodify(finddir('.git', escape(expand('%:p:h'), ' ') . ';'), ':h'))<CR>:pwd<CR> | 57 | function! CdToGitRepo() |
58 | let l:git_dir = finddir('.git', escape(expand('%:p:h'), ' ') . ';') | ||
59 | let l:repo = fnameescape(fnamemodify(l:git_dir, ':h')) | ||
60 | execute "cd" l:repo | ||
61 | endfunction | ||
62 | nnoremap cdg :call CdToGitRepo()<CR>:pwd<CR> | ||
59 | 63 | ||
60 | " alias for cd | 64 | " alias for cd |
61 | nnoremap cdd :cd<space> | 65 | nnoremap cdd :cd<space> |
@@ -83,10 +87,6 @@ nnoremap <C-k> ddkP | |||
83 | " execute "set <M-l>=\el" | 87 | " execute "set <M-l>=\el" |
84 | " execute "set <M-h>=\eh" | 88 | " execute "set <M-h>=\eh" |
85 | 89 | ||
86 | " Copy from system clipboard | ||
87 | nnoremap <leader>P :r !xsel -ob<CR> | ||
88 | vnoremap Y :w !xsel -ib<CR> | ||
89 | |||
90 | " Spell | 90 | " Spell |
91 | nnoremap <leader><leader>sp :set spell!<CR> | 91 | nnoremap <leader><leader>sp :set spell!<CR> |
92 | nnoremap <leader>ss ]s | 92 | nnoremap <leader>ss ]s |
@@ -99,11 +99,6 @@ nnoremap <C-g> 1<C-g> | |||
99 | vnoremap Tz :!trans -t zh-TW -b<CR> | 99 | vnoremap Tz :!trans -t zh-TW -b<CR> |
100 | vnoremap Te :!trans -t en-US -b<CR> | 100 | vnoremap Te :!trans -t en-US -b<CR> |
101 | 101 | ||
102 | " source .vimrc | ||
103 | nnoremap <leader>so V:so<CR> | ||
104 | nnoremap <leader><leader>so :source ~/.vimrc<CR> | ||
105 | vnoremap so :source<CR> | ||
106 | |||
107 | " }}} | 102 | " }}} |
108 | " MOVE ----------------{{{ | 103 | " MOVE ----------------{{{ |
109 | 104 | ||
@@ -115,15 +110,11 @@ noremap <silent> <expr> k (v:count == 0 ? 'gk' : 'k') | |||
115 | noremap <C-h> 30h | 110 | noremap <C-h> 30h |
116 | noremap <C-l> 30l | 111 | noremap <C-l> 30l |
117 | 112 | ||
118 | " }}} | 113 | " File under the cursor |
119 | " MANAGE_VIMRC ----------------{{{ | 114 | nnoremap <CR> gf |
115 | nnoremap gF :e <cfile><CR> | ||
120 | 116 | ||
121 | nnoremap <leader>e :scriptnames<space> | 117 | " READLINE_FEATURES ----------------{{{ |
122 | nnoremap <leader>ee :edit $MYVIMRC<CR> | ||
123 | autocmd! BUFWRITEPOST $MYVIMRC source $MYVIMRC | ||
124 | |||
125 | " }}} | ||
126 | " MOVING_WITH_READLINE ----------------{{{ | ||
127 | 118 | ||
128 | inoremap <C-f> <Right> | 119 | inoremap <C-f> <Right> |
129 | inoremap <C-b> <Left> | 120 | inoremap <C-b> <Left> |
@@ -157,15 +148,6 @@ noremap <m-k> gk | |||
157 | inoremap <m-j> <c-\><c-o>gj | 148 | inoremap <m-j> <c-\><c-o>gj |
158 | inoremap <m-k> <c-\><c-o>gk | 149 | inoremap <m-k> <c-\><c-o>gk |
159 | " }}} | 150 | " }}} |
160 | " INSERT_SURROUNDING ----------------{{{ | ||
161 | |||
162 | inoremap ' ''<Left> | ||
163 | inoremap " ""<Left> | ||
164 | inoremap ( ()<Left> | ||
165 | inoremap [ []<Left> | ||
166 | inoremap { {}<Left> | ||
167 | |||
168 | " }}} | ||
169 | " JUMP_TO_TABS_WITH_ALT ----------------{{{ | 151 | " JUMP_TO_TABS_WITH_ALT ----------------{{{ |
170 | 152 | ||
171 | noremap <silent><A-1> :tabn 1<CR> | 153 | noremap <silent><A-1> :tabn 1<CR> |
@@ -188,87 +170,122 @@ inoremap <silent><M-8> <Esc>:tabn 8<CR> | |||
188 | inoremap <silent><M-9> <Esc>:tablast<CR> | 170 | inoremap <silent><M-9> <Esc>:tablast<CR> |
189 | 171 | ||
190 | " }}} | 172 | " }}} |
191 | " MANAGE_TABS ----------------{{{ | ||
192 | 173 | ||
193 | " Useful mappings for managing tabs | 174 | " }}} |
194 | map <leader>tn :tabnew<CR> | 175 | " MANAGE_VIMRC ----------------{{{ |
195 | map <leader>tc :tabclose<CR> | ||
196 | map <leader>tm :tabmove<SPACE> | ||
197 | map <leader>to :tabonly<CR> | ||
198 | |||
199 | noremap <silent><m-h> :call Tab_MoveLeft()<CR> | ||
200 | noremap <silent><m-l> :call Tab_MoveRight()<CR> | ||
201 | 176 | ||
202 | " Let <leader>tl toggle between this and the last accessed tab | 177 | " source .vimrc |
203 | let g:lasttab = 1 | 178 | nnoremap <leader>so V:so<CR> |
204 | nmap <Leader>tl :exe "tabn ".g:lasttab<CR> | 179 | nnoremap <leader><leader>so :source ~/.vimrc<CR> |
205 | autocmd TabLeave * let g:lasttab = tabpagenr() | 180 | vnoremap so :source<CR> |
181 | autocmd! BUFWRITEPOST $MYVIMRC source $MYVIMRC | ||
206 | 182 | ||
207 | " Opens a new tab with the current buffer's path | 183 | " Find scripts |
208 | " Super useful when editing files in the same directory | 184 | nnoremap <leader>e :scriptnames<space> |
209 | map <leader>te :tabedit <C-r>=expand("%:p:h")<CR> | 185 | nnoremap <leader>ee :edit $MYVIMRC<CR> |
210 | 186 | ||
211 | " Tab move functions | ||
212 | function! Tab_MoveLeft() | ||
213 | let l:tabnr = tabpagenr() - 2 | ||
214 | if l:tabnr >= 0 | ||
215 | exec 'tabmove '.l:tabnr | ||
216 | endif | ||
217 | endfunc | ||
218 | function! Tab_MoveRight() | ||
219 | let l:tabnr = tabpagenr() + 1 | ||
220 | if l:tabnr <= tabpagenr('$') | ||
221 | exec 'tabmove '.l:tabnr | ||
222 | endif | ||
223 | endfunc | ||
224 | " }}} | 187 | " }}} |
225 | " MANAGE_BUFFERS ----------------{{{ | 188 | " MANAGE_BUFFERS ----------------{{{ |
226 | 189 | ||
227 | " set buflisted | 190 | " Set options |
228 | noremap <leader>st :set<space> | 191 | noremap <leader>st :set<space> |
192 | noremap <leader><leader>ft :<C-\>e'set filetype='..&filetype<CR> | ||
229 | 193 | ||
230 | " Open a new buffer | 194 | " Open a new buffer |
231 | nmap <leader><leader>b :enew<CR> | ||
232 | nmap <leader>B :enew<CR> | 195 | nmap <leader>B :enew<CR> |
233 | nmap <leader>O :e /tmp/buffer<CR> | 196 | nmap <leader>O :e /tmp/buffer<CR> |
234 | 197 | ||
235 | " Next buffer | ||
236 | noremap <leader>l :exe "buffer ".g:lastbuffer<CR> | ||
237 | " noremap <Tab> :exe 'buffer '.g:lastbuffer<CR> | ||
238 | |||
239 | " set filetype | ||
240 | noremap <leader><leader>ft :<C-\>e'set filetype='..&filetype<CR> | ||
241 | |||
242 | " Let <leader>l toggle between this and the last accessed buffer | 198 | " Let <leader>l toggle between this and the last accessed buffer |
243 | augroup SaveLastBuffer | 199 | augroup SaveLastBuffer |
244 | let g:lastbuffer = 1 | 200 | let g:lastbuffer = 1 |
245 | au BufLeave * let g:lastbuffer = bufnr() | 201 | au BufLeave * let g:lastbuffer = bufnr() |
246 | augroup END | 202 | augroup END |
203 | noremap <leader>l :exe "buffer ".g:lastbuffer<CR> | ||
204 | |||
205 | " Use Ctrl-C for buffer delete or quit vim ----------------{{{ | ||
206 | |||
207 | " Toggle behavior for the last buffer in the last window | ||
208 | let g:quitVimWhenPressingCtrlC = 1 | ||
209 | function! ToggleQuit() | ||
210 | let g:quitVimWhenPressingCtrlC = g:quitVimWhenPressingCtrlC ? 0 : 1 | ||
211 | let message = g:quitVimWhenPressingCtrlC ? "Unlock" : "Lock" | ||
212 | echo message | ||
213 | endfunction | ||
214 | nnoremap <leader><leader>gl :call ToggleQuit()<CR> | ||
215 | |||
216 | function! CheckSave() | ||
217 | if &modified | ||
218 | let answer = confirm("Save changes?", "&Yes\n&No\n&Cancel") | ||
219 | if answer == 1 | write | endif | ||
220 | if answer == 3 | return | endif | ||
221 | endif | ||
222 | |||
223 | if len(getbufinfo({'buflisted': 1})) == 2 | ||
224 | try | buffer # | bdelete! # | catch | endtry | ||
225 | else | ||
226 | bdelete! | ||
227 | endif | ||
228 | endfunction | ||
229 | func! QuitWithCheck() | ||
230 | if g:quitVimWhenPressingCtrlC | ||
231 | silent! quit | ||
232 | else | ||
233 | echo "Press <leader><leader>gl to allow quit with <C-c>" | ||
234 | endif | ||
235 | endfunc | ||
236 | function! Bye() | ||
237 | let windows = gettabinfo(tabpagenr())[0]['windows'] | ||
238 | let bufs = gettabinfo(tabpagenr())[0]['variables']['bufs'] | ||
239 | if len(windows) == 1 && len(bufs) == 1 | ||
240 | echo 'quit' | ||
241 | call QuitWithCheck() | ||
242 | elseif &diff | ||
243 | call CloseBuffersForDiff() | ||
244 | else | ||
245 | echo 'bdelete' | ||
246 | call CheckSave() | ||
247 | endif | ||
248 | endfunction | ||
249 | nnoremap <silent> <C-c> :call Bye()<CR> | ||
250 | |||
251 | "}}} | ||
252 | " Diff Mode ----------------{{{ | ||
253 | |||
254 | function! CloseBuffersForDiff() | ||
255 | windo | if &diff && &buftype == "nofile" | bdelete | endif | ||
256 | norm! zv | ||
257 | endfunction | ||
258 | |||
259 | command! DiffOrig vert new | set buftype=nofile nobuflisted | read ++edit # | 0d_ | ||
260 | \ | diffthis | wincmd p | diffthis | ||
247 | 261 | ||
248 | " Uset <C-w>d to toggle Diff mode | 262 | " Uset <C-w>d to toggle Diff mode |
249 | function! s:SwitchDiff() | 263 | function! s:SwitchDiff() |
250 | if &diff | 264 | if &diff |
251 | windo | if &buftype == "nofile" | bdelete | endif | 265 | call CloseBuffersForDiff() |
252 | else | 266 | else |
253 | DiffOrig | 267 | DiffOrig |
254 | wincmd p | set nobuflisted | wincmd p | ||
255 | endif | 268 | endif |
256 | endfunction | 269 | endfunction |
257 | com! SwitchDiff call s:SwitchDiff() | 270 | com! SwitchDiff call s:SwitchDiff() |
258 | nnoremap <C-w>d <Cmd>silent! SwitchDiff<CR> | 271 | nnoremap <C-w>d <Cmd>silent! SwitchDiff<CR> |
259 | 272 | ||
260 | function! s:SwitchDiffForGitHEAD() | 273 | function! s:SwitchDiffForGitHEAD() |
261 | nmap cdg | 274 | norm cdg |
262 | if &diff | 275 | if &diff |
263 | windo | if &buftype == "nofile" | bdelete | endif | 276 | windo | if &buftype == "nofile" | bdelete | endif |
277 | norm! zv | ||
264 | else | 278 | else |
265 | vert new | set buftype=nofile nobuflisted | 279 | vert new | set buftype=nofile nobuflisted |
266 | read !git show HEAD:# | 280 | read !git show HEAD:# |
267 | 0d_ | diffthis | wincmd p | diffthis | 281 | 0d_ | diffthis | wincmd p | diffthis |
268 | endif | 282 | endif |
269 | endfunction | 283 | endfunction |
270 | com! SwitchDiffForGitHEAD call s:SwitchDiffForGitHEAD() | 284 | command! SwitchDiffForGitHEAD call s:SwitchDiffForGitHEAD() |
271 | nnoremap <C-w>D <Cmd>silent! SwitchDiffForGitHEAD<CR> | 285 | nnoremap <C-w>D <Cmd>silent! SwitchDiffForGitHEAD<CR> |
286 | |||
287 | " }}} | ||
288 | |||
272 | " }}} | 289 | " }}} |
273 | " MANAGE_WINDOWS ----------------{{{ | 290 | " MANAGE_WINDOWS ----------------{{{ |
274 | 291 | ||
@@ -306,7 +323,41 @@ elseif has('nvim') | |||
306 | tnoremap <m-q> <c-\><c-n> | 323 | tnoremap <m-q> <c-\><c-n> |
307 | endif | 324 | endif |
308 | " }}} | 325 | " }}} |
309 | " FOLDING ----------------{{{ | 326 | " MANAGE_TABS ----------------{{{ |
327 | |||
328 | " Useful mappings for managing tabs | ||
329 | map <leader>tn :tabnew<CR> | ||
330 | map <leader>tc :tabclose<CR> | ||
331 | map <leader>tm :tabmove<SPACE> | ||
332 | map <leader>to :tabonly<CR> | ||
333 | |||
334 | noremap <silent><m-h> :call Tab_MoveLeft()<CR> | ||
335 | noremap <silent><m-l> :call Tab_MoveRight()<CR> | ||
336 | |||
337 | " Let <leader>tl toggle between this and the last accessed tab | ||
338 | let g:lasttab = 1 | ||
339 | nmap <Leader>tl :exe "tabn ".g:lasttab<CR> | ||
340 | autocmd TabLeave * let g:lasttab = tabpagenr() | ||
341 | |||
342 | " Opens a new tab with the current buffer's path | ||
343 | " Super useful when editing files in the same directory | ||
344 | map <leader>te :tabedit <C-r>=expand("%:p:h")<CR> | ||
345 | |||
346 | " Tab move functions | ||
347 | function! Tvab_MoveLeft() | ||
348 | let l:tabnr = tabpagenr() - 2 | ||
349 | if l:tabnr >= 0 | ||
350 | exec 'tabmove '.l:tabnr | ||
351 | endif | ||
352 | endfunc | ||
353 | function! Tab_MoveRight() | ||
354 | let l:tabnr = tabpagenr() + 1 | ||
355 | if l:tabnr <= tabpagenr('$') | ||
356 | exec 'tabmove '.l:tabnr | ||
357 | endif | ||
358 | endfunc | ||
359 | " }}} | ||
360 | " FOLD ----------------{{{ | ||
310 | 361 | ||
311 | " Set foldmethod | 362 | " Set foldmethod |
312 | noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR> | 363 | noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR> |
@@ -317,13 +368,19 @@ nnoremap zr zr:set foldlevel<CR> | |||
317 | 368 | ||
318 | " Use l to open fold | 369 | " Use l to open fold |
319 | nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo' | 370 | nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo' |
320 | sourcesourcesource | 371 | |
321 | " Open fold in next line | 372 | " Open fold in next line |
322 | nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo' | 373 | nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo' |
323 | nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO' | 374 | nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO' |
324 | 375 | ||
325 | " }}} | 376 | " }}} |
326 | " SURROURD_WITH_CHAR ----------------{{{ | 377 | " SURROUND ----------------{{{ |
378 | |||
379 | inoremap ' ''<Left> | ||
380 | inoremap " ""<Left> | ||
381 | inoremap ( ()<Left> | ||
382 | inoremap [ []<Left> | ||
383 | inoremap { {}<Left> | ||
327 | 384 | ||
328 | vnoremap S sa | 385 | vnoremap S sa |
329 | vnoremap ' <ESC>`<i'<ESC>`>la'<ESC> | 386 | vnoremap ' <ESC>`<i'<ESC>`>la'<ESC> |
@@ -403,7 +460,6 @@ let g:tig_explorer_keymap_commit_vsplit = '<C-v>' | |||
403 | nnoremap <C-t> <Cmd>Tig<CR> | 460 | nnoremap <C-t> <Cmd>Tig<CR> |
404 | nnoremap <C-t>s <Cmd>TigStatus<CR> | 461 | nnoremap <C-t>s <Cmd>TigStatus<CR> |
405 | nnoremap <C-t>b <Cmd>TigBlame<CR> | 462 | nnoremap <C-t>b <Cmd>TigBlame<CR> |
406 | nnoremap <C-t>d :vertical TigOpenFileWithCommit <C-R>+ % 0<CR> | ||
407 | 463 | ||
408 | " }}} | 464 | " }}} |
409 | " Markdown items (temproray solution) ----------------{{{ | 465 | " Markdown items (temproray solution) ----------------{{{ |