A codeforces helper plugin for vim, ported from emacs plugin gnull/cfparser.
- Install
curl
. - Install
cfparser.vim
with your favorite vim plugin manager. If you usevim-plug
:
Plug 'gabrielsimoes/cfparser.vim'
You can setup some variables at your .vimrc:
g:cf_cookies_file
- File in whichcurl
will store cookies (default:'~/.cf_cookies'
)g:cf_default_language
- Language to be used when it it not recognized from file extension. Languages codes are available atplugin/cfparser.vim
. The default is"54"
which corresponds toC++17
, as defined in the variableg:cf_pl_gpp
.g:cf_pl_by_ext_custom
- A dictionary from file extension to language code to override the defaults.cfparser.vim
will first check in the custom map, and if not found it will check the default map, and finallyg:cf_default_language
. If you preferC++11
overC++17
, for example:
let g:cf_pl_by_ext_custom = {'.cpp': "42"}
g:cf_locale
- Language to download problem statement. Either"ru"
or"en"
(default:"en"
)- You can also redefine the function
cfparser#CFTestAll()
, that is, the function that is called to test your solution against test files. The default definition is as follows. You can redefine the function by writing your own version of it at your.vimrc
, after loadingcfparser.vim
.
function! cfparser#CFTestAll()
echo system(printf("g++ %s -o /tmp/cfparser_exec;
\cnt=0;
\for i in `ls %s/*.in | sed 's/\\.in$//'`; do
\ let cnt++;
\ echo \"\nTEST $cnt\";
\ /tmp/cfparser_exec < $i.in | diff -y - $i.out;
\done;
\rm /tmp/cfparser_exec",
\ expand('%:p'), expand('%:p:h')))
endfunction
This will compile the file with g++
and test it against 0.in
and 0.out
, 1.in
and 1.out
, etc...
- You also redefine the function
cfparser#CFRun()
, the function that is called to test your solution in an interactive shell. You can redefine it by writing your own version of it at your.vimrc
, after loadingcfparser.vim
. The default definition is below:
function! cfparser#CFRun()
echo system(printf("g++ %s -o /tmp/cfparser_exec", expand('%s:p')))
RunInInteractiveShell /tmp/cfparser_exec
call system("rm /tmp/cfparser_exec")
endfunction
This will compile the file with g++
and run it with the command RunInteractiveShell
, which is provided by the following plugin: christoomey/vim-run-interactive.
<leader>cfi
- Login (callsCFLogin()
)<leader>cfo
- Logout (callsCFLogout()
)<leader>cfw
- Who am I (callsCFWhoAmI()
)<leader>cfp
- Display problem statement (callsCFProblemStatement()
)<leader>cfd
- Download sample tests to current code folder (0.in, 0.out, 1.in ...) (callsCFDownloadTests()
)<leader>cfc
- Clear previously downloaded sample tests from current folder (0.in, 0.out, 1.in ...) (callsCFClearTests()
)<leader>cft
- Runs code with sample tests (callsCFTestAll()
)<leader>cfr
- Runs code in an interactive shell (callsCFRun()
)<leader>cfs
- Submit current open file (callsCFSubmit()
)<leader>cfl
- List most recent submissions (callsCFLastSubmissions()
without arguments - can be called with username as argument, default to logged in user)
When using the submit, download sample tests and problem statement functions, cfparser will "guess" the contest number, problem index and the programming language by the current file name. It should be in one of the following forms: (it could be any extension besides .cpp)
directory/123/A/myfile.cpp
directory/123/A.cpp
directory/123A.cpp