FHVirus' 隨筆

.vimrc

2022-05-15

看雞塊的這篇看的心癢癢,更新了兩下所以就重新放的一篇。

因為我的 .vimrc 又進化了,所以再放一次。


我現在的 .vimrc 長這樣:

1
2
3
4
5
source ~/.vim/options.vim
source ~/.vim/comment.vim
source ~/.vim/keymaps.vim
source ~/.vim/togglet.vim
source ~/.vim/plugins.vim

我把正常會寫在 .vimrc 裡面的東西分裝到 .vim 底下各個檔案裡面了。所有檔案在 這裡 找的到,底下也會一一解說。 如果有初學者想要用的話也不要害怕,把檔案貼一貼路徑改一改就對了 ><

大概功能:


options.vim

 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
" se enc=utf-8 scripte=utf-8 fenc=utf-8
set encoding=utf-8
scriptencoding=utf-8
set fileencoding=utf-8

" se t_Co=256 tgc | sy on | colo monokai
set t_Co=256
set termguicolors
syntax on
colorscheme monokai

" se nu ru rnu cin cul sc so=4 ts=2 sw=2 bs=2 ls=2 bo=a
set number
set ruler
set relativenumber
set cindent
set cursorline
set showcmd
set scrolloff=4
set tabstop=2
set shiftwidth=2
set backspace=2
set laststatus=2
set belloff=all

" se hls is ic scs
set hlsearch
set incsearch
set ignorecase
set smartcase

" se nowrap | filet plugin indent on
set nowrap
filetype plugin indent on

功能簡介

想知道每個在幹嘛的話請自己在 vim 裡面打 :help <option>

  1. 基本的設定編碼。不確定是怎麼運作的所以不敢拿掉。
  2. 顏色相關的東西。我自己是用 這個 然後把他的 monokai.vim 直接貼到 ~/.vim/colors 底下。
  3. 正常的輔助功能設定,比賽的時候會打上面縮減的那段。
  4. 搜尋相關的東西,還蠻實用的,從 這裡 抄來的。
  5. 雜項。要開著 filetype plugin on 才可以用 ~/.vim/ftplugin/ 裡面的東西。

精簡版

1
2
sy on | colo monokai | filet plugin indent on
se enc=utf-8 scripte=utf-8 fenc=utf-8 t_Co=256 tgc nu ru rnu cin cul sc so=4 ts=2 sw=2 bs=2 ls=2 bo=a hls is ic scs nowrap

comment.vim

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
" Commenting blocks of code.
" The following line can also be used for .cpp files:
" autocmd FileType cpp noremap <buffer> <silent> <C-P> :<C-B>silent! <C-E>s#^\(\s*\)#\1// <CR> :<C-B>silent! <C-E>s#^\(\s*\)// //\s*#\1<CR>
augroup commenting_blocks_of_code
  autocmd!
  autocmd FileType c,cpp,java,scala let b:comment_leader = '//'
  autocmd FileType sh,ruby,python   let b:comment_leader = '#'
  autocmd FileType tex              let b:comment_leader = '%'
  autocmd FileType vim              let b:comment_leader = '"'
augroup END
nnoremap <silent> <C-P> :<C-B>silent <C-E>s,^\(\s*\),\1<C-R>=b:comment_leader<CR> ,e <bar>
		\s,^\(\s*\)<C-R>=b:comment_leader<CR> <C-R>=b:comment_leader<CR>\s*,\1,e<CR>:nohlsearch<CR>
vnoremap <silent> <C-P> :<C-B>silent <C-E>g/^/ s,\(\s*\),\1<C-R>=b:comment_leader<CR> ,e <bar>
		\s,\(\s*\)<C-R>=b:comment_leader<CR> <C-R>=b:comment_leader<CR>\s*,\1,e<CR>:nohlsearch<CR>

這裡 改的,基本上就是用 regex 來做取代而已,長的有點醜,不知道要怎麼讓他變漂亮。


keymaps.vim

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
inoremap {<CR> {<CR>}<ESC>O
noremap ; :
nmap <F5> :%d<CR>"+P:w<CR>
nmap <F9> :%y+<CR>
nnoremap <silent> <ESC><ESC> :<C-U>set nohlsearch!<CR>
nnoremapr :so ~/.vimrc<CR>

" NERDTree mappings
nnoremapn :NERDTreeFocus<CR>
nnoremapt :NERDTreeToggle<CR>
nnoremapf :NERDTreeFind<CR>

少少的,除了自動大括號和懶人冒號之外沒什麼特別的。 上面的怪怪 esc 是因為 alt 鍵要用怪怪的方式 map (先按下 CTRL-V 然後再按需要的 keybind )。


togglet.vim

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
" Toggle transparent background
let g:is_transparent = 1
function! Toggle_transparent_background()
  if g:is_transparent == 0
    " hi Normal guibg=NONE ctermbg=234
		set tgc
		colo monokai
    let g:is_transparent = 1
  else
    " hi Normal guibg=NONE ctermbg=NONE
		set tgc!
		colo ron
    let g:is_transparent = 0
  endif
endfunction
nnoremapk :call Toggle_transparent_background()<CR>

切換透明背景用的。不知道為什麼有 tgc 的時候就不能用透明背景了,反正可以用就好。 註解掉的那兩行在沒有 set tgc 的情況下也是可以用的。


plugins.vim

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
call plug#begin('~/.vim/plugged')
Plug 'cespare/vim-toml'
Plug 'pangloss/vim-javascript'
Plug 'joker1007/vim-markdown-quote-syntax'
Plug 'vim-latex/vim-latex'
Plug 'gi1242/vim-tex-syntax'
Plug 'godlygeek/tabular'
Plug 'rlue/vim-barbaric'
Plug 'fhvirus/learn-hjkl'
Plug 'preservim/nerdtree'
call plug#end()

" for barbaric
set ttimeoutlen=0

ftplugin/cpp.vim

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
nmap <buffer> <F3> :%d<CR>:r ~/OWO/templates/template.cpp<CR>kJ18zF22G
nmap <buffer> <F4> :tabe ~/OWO/in.in<CR>
nmap <buffer> <F6> :%d<CR>:r ~/OWO/templates/minimum.cpp<CR>kJ6G
nmap <buffer> <F7> :w<CR>:!g++ "%" -o ~/OWO/run -std=c++17 -Wall -DOWO -fsanitize=undefined<CR>
nmap <buffer> <F8> :w<CR>:!echo "\t\tinput\n" && cat ~/OWO/in.in && echo "\n\t\toutput\n" && ~/OWO/run < ~/OWO/in.in<CR>

" clang-format mappings
map <C-K> :py3f ~/.vim/clang-format.py<CR>
imap <C-K> <C-O>:py3f ~/.vim/clang-format.py<CR>

" Load template
command -buffer -nargs=1 Load :r ~/OWO/templates/<args>.cpp

" Hash selected range (from kactl)
ca Hash w !cpp -dD -P -fpreprocessed \| tr -d '[:space:]' \| md5sum \| cut -c-6

一些 C++ 專用的快捷建。

  1. 刷 default code ,快速執行、編譯。
  2. clang-format 真的是個好東西。可以自動把醜醜的 code 變得很漂亮,強烈建議裝(說明在 這裡 )。
  3. 讀模板。
  4. 我不確定會不會用到但是先放著了。

大概就這樣吧。