백준 풀 때 Vim 씁시다

차승준·2023년 9월 22일
7
post-thumbnail

왜 Vim을...?

코드 자동완성, 스마트 IDE가 넘쳐나는 요즘 세상에 Vim을 왜 쓰지? 라는 생각이 들 수도 있다. 유용한 Extension이 넘쳐나고 사용하기 쉬운 Vscode, 강력한 디버깅 툴을 제공해주는 Jetbrains IDE 등등 많은데 말이다.

하지만 백준같은 온라인 저지 문제를 해결할 때는 그런 강력한 툴보다 가벼움, 효율성이 가장 중요하다고 본다.

Vim 의 장점은, Learning Curve가 높은 만큼 숙달되었을 때 막강한 효율성을 보여준다는 것이다.

나도 처음엔 세 가지 모드를 왔다갔다 하는 것도 헷갈리고, 줄 간 이동도 버거웠다.
하지만 적응이 조금씩 되면서 코딩할 때 마우스가 얼마나 효율성을 떨어뜨리는지에 대해 알게 되었다.

  • 실제 Google Code Jam (🪦RIP) 같은 메이저 코딩 대회의 상위권 유저들이 많이 쓰는 코드 에디터가 Vim / Neovim / Emacs 이다. 문제를 빠르게 푸는것이 가장 중요하므로 효율성이 높은 Keyboard-Based 에디터를 사용하는 것이다.

그리고 가장 중요하다고 할 수 있는 장점이

  • 코딩할 때 간지 난다

  • "아 저는 Vim 쓰는데요?" 를 사용할 수 있다

Vim 시작하기

우선 Vim 공식 사이트에 접속해서 본인 OS에 맞게 설치한다.

설치 후, 터미널에서 다음과 같은 커맨드로 열 수 있다.

vim main.c

다음으로는 vim의 각종 설정들을 정할 수 있는 vimrc파일을 설정해야 한다.

open ~/.vimrc

본인의 입맛에 맞게 설정하면 되지만, 필자가 사용하는 기본적인 설정은 다음과 같다.

set number						"줄 번호 매기기
syntax enable					"Syntax Highlighting
set vb t_vb=					"잘못 입력했을 때 나는 삑 소리 끄기
filetype plugin indent on		"파일 유형에 따라 들여쓰기 자동
set autoindent					"새로운 줄을 현재 줄의 들여쓰기에 맞게
set expandtab					"탭 문자를 스페이스로 변환
set ts=4						"탭 크기 = 4 스페이스
set bg=dark						"다크모드
set backspace=indent,eol,start	"백스페이스 백스페이스답게 만들기
set si							"스마트 들여쓰기
set encoding=utf-8				"한국어 인코딩
set fileencoding=utf-8			"파일 한국어 인코딩
set nocursorline				"글자 선택 커서

아니면 이분처럼 설정해도 된다.

다음으로는 가장 중요한 단축키들을 배워야 하는데....

꽤 복잡해 보이지만 계속 써보면 금방 적응된다....!

여기서 꽤나 잘 설명해주셔서 속성으로 한시간 정도 공부하면 잘 사용할 수 있다.

관련 터미널 Alias 설정하기

백준 문제를 풀려 할 때, 터미널에서 바로 파일을 열고, 컴파일 & 실행하기 위한 단축키를 지정하면 좋다.

  • 터미널에서 사용할 단축어를 zsh에서는 이렇게 정할 수 있다.
open ~/.zshrc

zshrc 파일에 다음 라인 추가

alias 단축어='단축어가 할 행동'

저장 후 터미널에서 다음 라인 실행

source ~/.zshrc
  • 필자는 우선 주로 사용하는 세가지 언어 (C, C++, Python)에 대해서 다음과 같이 설정했다.

1) vimpy, vimc, vimcpp로 파일을 열고, 문제를 푼다.
2) runpy, runc, runcpp로 파일을 컴파일 & 실행한다
3) 문제를 잘 풀었으면 copypy, copyc, copycpp 로 파일을 복사해 제출한다.

  • 나의 커맨드 (MacOS 기준)

Python

alias vimpy='vim 파일디렉토리'
alias runpy='python3 파일디렉토리'
alias copypy='cat 파일디렉토리 | pbcopy'

C

alias vimc='vim 파일디렉토리'
alias runc='gcc 파일디렉토리 -o execute && ./execute'
alias copyc='cat 파일디렉토리 | pbcopy'

C++

alias vimcpp='vim 파일디렉토리'
alias runcpp='g++ -std=c++11 -o executecpp 파일디렉토리 && ./executecpp'
alias copycpp='cat 파일디렉토리 | pbcopy'
  • 추가로 있으면 편한 커맨드
    필자는 코드 파일들을 언어별로 묶어서 폴더에 저장하는 편이라, 아래는 특정 언어 파일을 만들고 싶을 때 편한 cd 커맨드이다.

이제 백준 풀때 메모리 2기가씩 잡아먹는 Vscode 켜지 말고,
효율성 높은 Vim과 본인에게 최적화된 커맨드를 사용하면서 빠르게 문제 풀어봐요 :O

profile
CAU CSE

6개의 댓글

comment-user-thumbnail
2023년 9월 27일

흑흑 vi은 너무 어려워요

1개의 답글
comment-user-thumbnail
2023년 10월 1일

손에 익으면 벗어나기 힘들죠
덕분에 마우스 안씁니다

1개의 답글
comment-user-thumbnail
2023년 10월 1일

지나가다가 vim 영업하는글을 보고 반가운 마음에 댓글을 남깁니다! Neovim을 쓰시는 경우 competitest.nvim이라는 플러그인으로 여러개의 테스트케이스를 관리할 수 있습니다 👀👀 https://github.com/xeluxee/competitest.nvim

1개의 답글
Powered by GraphCDN, the GraphQL CDN