전통적으로 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 에서 지원합니다.


  1. FeatureUse Clink in prompt 를 체크해 준 줍니다.

  2. 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 + rhistory 역순 검색(bash 의 readline 과 동일)
Ctrl + shistory 검색(bash 의 readline 과 동일)

Shift + mouse

영역 선택 및 선택 영역 클립 보드로 복사


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 로 정의하지 말고 환경 변수로 정의합니다.

config/user-profile.cmd
:: set "PATH=%CMDER_ROOT%\vendor\whatever;%PATH%"


set VI=d:\util\Vim\Vim80\gvim.exe


이제 alias 에서는 다음과 같이 사용할 수 있습니다.

config/user-aliases.cmd
;= 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"

bash on Windows 쉘로 cmder 사용하기


같이 보기