實用刷題、線上賽C++配置(VSCode + ccls)

寫不動題了,來寫篇小文章放鬆一下,記錄一下自己的配置,也供讀者參考。

注:運行環境爲Arch Linux

  • gcc 如果不用pbds等,可以直接用clang編譯,和gcc的差異基本上只有少量UB,__int128也是支持的,不過Linux基本上不能不裝gcc
  • llvm(clang) 除了作爲一個編譯器之外,還提供強大的自動補全、代碼檢查、代碼格式化等相關工具,clion、qtcreator等都依賴它
  • ccls 基於clang的LSP(language server protocol),完成度比clang的類似組件clangd更高。注意:更新clang後需要用新版本的clang重新編譯ccls,否則可能會出現各種問題(包括完全掛掉)
  • visual-studio-code 體驗不錯,插件生態非常好的編輯器
  • ccls 核心插件,提供語法檢查、補全、高亮、變量重命名、code lens等等
  • clang-format ccls的提供的格式化偶爾會抽風,單獨用這個比較穩定
  • Code Runner 一鍵編譯運行
  • easy-snippet 非常方便的snippet管理工具,可以用來存板子
  • CodeLLDB 可選,整合lldb,偏好gdb的用戶可以不裝
  • Vim 可選,vim模擬
  • ICIE 拉取codeforces上面的題目和樣例,並根據通用模板生成文件,並且可以一鍵測試,通過後直接submit,現在已經支持直接拉取正在進行或即將進行的比賽,除了hack和看榜之外可以不用打開瀏覽器
  • Better Online Judge 和前者類似,用於vjudge上的比賽,功能較弱,拉取不了樣例
  • vscode-clangd 備用,比如在睡前更新clang後忘記重編譯ccls,第二天開始打了發現ccls炸了,可以把clangd拉出來救急(親身經歷)。目前它的功能略弱於ccls,但畢竟是llvm官方的組件,不排除以後會趕超

注:如果使用第三方調試工具的話,不用安裝微軟官方的cpptools插件

可以調整自動補全的case sensitivity(大小寫敏感)和detailed label(補全時顯示標準庫函數的詳細功能)。高亮部分可以根據自己喜好調整,建議打開type aliases等

可以自己改運行命令,以下供參考:

1
2
"c": "cd $dir && gcc -g $fileName -o /tmp/ctest && time /tmp/ctest",
"cpp": "cd $dir && g++ -g $fileName -o /tmp/cpptest && time /tmp/cpptest",

VSCode的vim插件功能挺多的,尤其是支持neovim做後端,以下設置供參考

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
"vim.easymotion": true,
"vim.enableNeovim": true,
"vim.sneak": true,
"vim.sneakUseIgnorecaseAndSmartcase": true,
"vim.statusBarColorControl": true,
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "1",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/bin/fcitx-remote",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/bin/fcitx-remote -t {im}",
"vim.foldfix": true,
"vim.neovimPath": "/usr/bin/nvim",
"vim.useSystemClipboard": true,

"icie.template.list"下寫你的通用模板的文件路徑

這個插件的通用模板是硬編碼的,直接修改~/.vscode/extensions/yiyangxu.better-oj-<版本號>/out/utils/template.js