cmder - 최고의 Windows 용 console emulator
지금(2020년)은 cmder 보다는 윈도우즈 터미널(Windows Terminal) 사용을 권장합니다.
전통적으로 MS 의 운영 체제는 기본 shell인 COMMAND.com 의 기능이 많이 부족했습니다.
그래서 저는 도스 시절에는 JPSoft 라는 유틸리티 회사에서 만든 4DOS 라는 대체 쉘을 사용하였고 Windows 시절로 넘어왔어도 4DOS 의 NT 버전인 4NT 를 사용했습니다.
워낙 오래 써서 익숙했지만 cmder 를 알게 되고 나서는 20년 넘게 써온 JPSoft 의 제품을 버리고 cmder 로 이동하고 있으며 기록 차원에서 이 페이지를 작성합니다.
설치 & 설정
설치는 http://cmder.net/ 에 연결하면 git 이 포함된 full 버전과 최소 버전이 있으며 저는 최소 버전을 다운 받고 압축을 풀어서 설치했습니다.
설치가 끝난후에 cmder.exe 를 실행하고 Settings 에 들어가서 설정을 수정합니다.
폰트
콘솔에서 한글을 제대로 표시하기 위해 Main → Alternative font 에 한글 글꼴을 설정해 줍니다.
사전에 한글 폰트를 설치해야 합니다.
Theme
Feature → Colors 에서 칼라 테마를 설정할 수 있으며 저는 Solarized Light 를 좋아해서 이걸로 설정했습니다.
clink 로 readline 기능 사용하기
지금은 "Oh my zsh!" 의 인기때문에 zsh 에 밀렸지만 GNU bash 는 매우 편리한 기능을 많이 제공했습니다.
특히 화살표나 단축키로 예전 명령어를 호출하고 편집할 수 있는 "command history" 나 탭 키를 누르면 명령어나 파일명이 자동 완성되는 "auto Completion" 기능은 터미널 작업시 실수를 줄여주고 엄청난 생산성 향상을 가져다 주었습니다.
bash 의 이런 기능은 높은 인기를 누려서 GNU readline 이라는 별도의 library 로 분리되어서 이를 사용하고 개발하면 프로그램에서 bash 의 편리한 커맨드 관리 기능을 제공할 수 있었습니다.
심지어는 커맨드 관리 기능이 없는 프로그램을 편리하게 사용하기 위한 rlwrap 라는 유틸리티도 있습니다.
clink 는 윈도우 shell 에서도 readline 의 기능을 사용하기 위한 유틸리티로 cmder 에서 지원합니다.
- Feature → Use Clink in prompt 를 체크해 준 줍니다.
- clink 를 다운받은 후에 cmder 폴더의 vendor\conemu-maximus5\ConEmu\clink 에 압축을 풀어 줍니다.
단축키 사용
cmder
cmder 은 다음과 같이 유용한 단축키를 지원합니다.
Tab 관리
단축키 | 기능 |
---|---|
Ctrl + ` | taskbar로 cmder 보내기 |
Ctrl + t | 새 탭 띄우기 |
Ctrl + w | 탭 닫기 |
Shift + alt + 1 | admin 으로 새 탭 띄우기 |
Shell
단축키 | 기능 |
---|---|
Ctrl + Alt + u | 한 단계 상위 폴더로 가기(cd .. 와 동일) |
Ctrl + r | history 역순 검색(bash 의 readline 과 동일) |
Ctrl + s | history 검색(bash 의 readline 과 동일) |
Shift + mouse | 영역 선택 및 선택 영역 클립 보드로 복사 |
clink
clink 를 설정했으면 bash 처럼 명령어 단축키를 사용해서 생산성을 높일 수 있습니다. bash의 단축키 목록과 사용 예는 여기를 참고하면 됩니다.
clink는 추가로 일반적인 윈도우 프로그램처럼 편집한 내용을 되돌리는 Ctrl-Z 와 클립보드에서 붙여넣는 Ctrl-V 도 지원합니다.
그리고 % 로 시작하는 환경 변수도 지원하므로 %p 만 입력하고 탭 키를 치면 %path%, %programdata% 등 관련 환경 변수가 모두 출력 됩니다.
startup 파일
cmder 실행시 초기 설정이 필요한 경우 config/user-profile.cmd 에 기술하면 되며 다음은 제 설정 파일의 일부입니다. 주석은 위와는 달리 :: 을 주면 됩니다.
:: use this file to run your own startup commands :: use in front of the command to prevent printing the command :: call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd" :: set "PATH=%CMDER_ROOT%\vendor\whatever;%PATH%" SET EDITOR="C:\util\Vim8.0\vim80\gvim.exe" :: for CMake SET CMAKE_MAKE_PROGRAM=mingw32-make SET CMAKE_C_COMPILER=mingw32-gcc.exe SET CMAKE_CXX_COMPILER=mingw32-g++.exe :: for docker SET DOCKER_CERT_PATH="d:\docker\machines\default" SET DOCKER_HOST="tcp://192.168.99.100:2376" SET DOCKER_TLS_VERIFY=1 :: MACHINE_STORAGE_PATH=d:\docker\machine\default SET PATH=%PATH%;c:\util\Sysinternals;D:\devel\gradle-2.9\bin;
기존 환경 변수가 필요한 경우 마지막 줄처럼 %변수% 를 사용하면 됩니다.
alias
alias 정의
cmder 은 DOS 시절부터 존재했던 매크로 관리 명령어인 doskey 를 사용하여 별칭을 관리하며 지정은 alias 명령어를 사용하면 됩니다.
alias ls=dir
자주 사용하는 별칭은 config/user-aliases.cmd 에 한 줄씩 alias 할 명령어를 적어주면 되며 ;= 는 주석으로 처리됩니다.
;= 주석입니다. ls = dir
여러 개의 alias 를 지정할 경우 구분자($t) 로 명령어를 나눠서 작성하며 다음 명령어는 dir 실행후 pwd 를 실행합니다.
dp=dir $t pwd
파라미터를 전달할 경우 모든 파라미터를 의미하는 $* 를 명령어 뒤에 붙여 주면 되며 다음과 같이 vi 를 alias 할 경우 vi test.txt 처럼 실행해서 편집할 파일을 파라미터로 전달할 수 있습니다.
art=php artisan ;= gvim 을 vi 로 alias vi=d:\util\Vim\Vim80\gvim.exe $*
user-aliases.cmd 가 변경되었다면 cmder 을 재구동하거나 또는 alias /reload 명령을 실행하면 바로 반영됩니다.
alias 내에 한글 폴더나 파일이 있을 경우 file encoding 은 현재 커맨드의 인코딩(chcp 로 확인 가능)과 일치해야 합니다.
즉 chcp 의 결과가 949이면 EUC-KR 이어야 하고 65001 일 경우는 UTF-8 이어야 합니다.
alias 재사용
DOSKEY 명령의 한계로 alias 한 명령어를 다시 alias 할 수는 없습니다. 즉 vi 를 alias 했어도 아래와 같이 사용할 수는 없습니다.
vi=d:\util\Vim\Vim80\gvim.exe $* eh=vi c:\windows\System32\drivers\etc\hosts
위의 vi 처럼 여러 번 사용해야 하는 alias 가 있다면 cmder 의 startup 파일(config/user-profile.cmd)에 정의하고 이것을 환경 변수로 사용하면 됩니다.
예로 vi 를 alias 로 정의하지 말고 환경 변수로 정의합니다.
:: set "PATH=%CMDER_ROOT%\vendor\whatever;%PATH%" set VI=d:\util\Vim\Vim80\gvim.exe
이제 alias 에서는 다음과 같이 사용할 수 있습니다.
;= vi 로 hosts 파일 편집 eh=%VI% c:\windows\System32\drivers\etc\hosts ;= alias 편집 qal=%VI% qal=%VI% "%CMDER_ROOT%\config\user-aliases.cmd" $t alias/reload ;= startup 파일 편집 sett=%VI% "%CMDER_ROOT%\config\user-profile.cmd"