在ACM/ICPC系列比賽中,大多數使用的都是Ubuntu系統。
如果你寫的是C++,要麼用gedit,要麼用Vim。所以,學會使用Vim是很重要的。
當然,大多數非正式比賽中,比如省賽、校賽等,主辦方提供的往往都還是Windows系統。
本文分享一下我箇人使用的Gvim配置文件。
Gvim的配置文件是_vimrc
,沒有後綴。一般在它的安裝目錄下就能找到。
behave mswin
set nu!
syntax enable
syntax on
set guifont=consolas:h16
behave mswin
set noundofile
set nobackup
set noswapfile
colorscheme desert
map <F11> :call CR()<CR>
func! CR()
exec "w"
exec "!g++ -DLOCAL -O2 % -o %<"
exec "! %<"
endfunc
map <F10> :call R()<CR>
func! R()
exec "w"
exec "! %<"
endfunc
set showmatch
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab
set softtabstop=4
set go=
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {<CR><CR>}<ESC>kcc
inoremap " ""<ESC>i
inoremap ' ''<ESC>i
"调用AStyle程序,进行代码美化
func CodeFormat()
"取得当前光标所在行号
let lineNum = line(".")
"C源程序
if &filetype == 'c'
"执行调用外部程序的命令
exec "%! astyle -A2Lpk3NS\<CR>"
"H头文件(文件类型识别为cpp),CPP源程序
elseif &filetype == 'cpp'
"执行调用外部程序的命令
exec "%! astyle -A2Lpk3NS\<CR>"
"JAVA源程序
elseif &filetype == 'java'
"执行调用外部程序的命令
exec "%! astyle -A2Lfpk3NS\<CR>"
else
"提示信息
echo "不支持".&filetype."文件类型。"
endif
"返回先前光标所在行
exec lineNum
endfunc
"映射代码美化函数到Shift+f快捷键
map <S-F> <Esc>:call CodeFormat()<CR>
簡單介紹一下這份配置:
配色:desert;
字體:consolas(因爲這個字體在大多數系統下都存在,而且相對來說比較適合用來顯示代碼);
字號:16;
開啓行號,語法高亮等;
F11對應的是編譯並運行,F10僅運行。
Normal Mode下, shift + F
能利用Astyle.exe
格式化代碼。
到了場上,敲上去就行了。有一次我把map <F11> :call CR()<CR>
敲成了map <F11>:call CR()<CR>
,沒法編譯。這都是因爲少了個空格。
我用的Astyle是2.06版本的。其他版本對於相同格式化指令效果可能會有差異。
格式化的時候,它需要和代碼放在同樣的目錄下。
Astyle一般可以在devcpp中取得,而devcpp在比賽中往往都有提供。
不過說實話,比賽的時候並不會有時間給你格式化代碼,這只是爲了貼代碼的時候美觀一點。
最常用的格式化代碼的方法還是用vim全選縮進:ggVG==
或者 gg100==
。
100在這裏是個大於總行數的數字。