-96,7 +96,7 |
{{{#!vim tmux |
# reload conf |
# prefix r 을 누르면 .tmux.conf 를 읽어서 곧바로 적용 |
# prefix r 을 누르면 .tmux.conf 를 읽어서 적용 |
bind r source-file ~/.tmux.conf \; display "Reloaded!" |
# Ctrl+a 를 prefix 로 |
-108,8 +108,12 |
set-option -g visual-bell on |
# pane 분할을 | 와 - 로 |
bind | split-window -h |
bind - split-window -v |
# 현재 pane의 cwd를 이어받도록 함 |
bind | split-window -h -c "#{pane_current_path}" |
bind \ split-window -h -c "#{pane_current_path}" |
bind - split-window -v -c "#{pane_current_path}" |
# 새 window 생성 때도 현재 cwd를 사용 |
bind c new-window -c "#{pane_current_path}" |
# 직전에 사용하던 윈도우 이동 |
bind a last-window |
-120,11 +124,20 |
# monitor activity and silence |
set-window-option -g monitor-activity on |
set-option -g visual-activity on |
# set-option -g visual-activity on |
set-window-option -g monitor-silence 0 |
bind S set-window-option monitor-silence 30 |
bind M-s set-window-option monitor-silence 0 |
# window 번호를 0이 아니라 1부터 |
set-option -g base-index 1 |
# pane 번호를 0이 아니라 1부터 |
set-window-option -g pane-base-index 1 |
# window swap |
bind-key -n C-S-Left swap-window -t -1 |
bind-key -n C-S-Right swap-window -t +1 |
# 상태바 설정 |
# default statusbar colors |
set-option -g status-bg blue |
-159,6 +172,23 |
# 윈도우를 닫으면, 남은 윈도우들의 번호를 다시 0부터 순차적으로 재정리 |
set-option -g renumber-windows on |
# List of plugins |
# Supports `github_username/repo` or full git repo URLs |
set -g @tpm_plugins ' \ |
tmux-plugins/tpm \ |
tmux-plugins/tmux-resurrect \ |
' |
# Other examples: |
# github_username/plugin_name \ |
# git@github.com/user/plugin \ |
# git@bitbucket.com/user/plugin \ |
# Initializes TMUX plugin manager. |
# Keep this line at the very bottom of tmux.conf. |
# prefix+I - install new plugin and refresh |
# prefix+U - update plugin(s) |
run-shell '~/.tmux/plugins/tpm/tpm' |
}}} |
* tmux 는 <code>:source-file</code> 명령으로 실행 도중에 설정 파일을 읽어서 적용시킬 수 있는데, 이게 또 매번 입력해주기 귀찮으니 ''prefix r''을 누르면 되도록 함 |
-166,8 +196,7 |
* 상태바 설정이 정말 screen에 비하면 훨씬 알아보기 편하다. 이런 모습으로 꾸미기 위해서 .screenrc에는 <code>hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "</code>라고 적어줬어야 했다. |
Upload:tmux05.png |
* mouse로 pane을 선택하거나, pane경계를 클릭해서 크기를 조절할 수 있긴 한데, 이걸 켜니까 마우스로 터미널 내용을 긁어서 복사하는 게 동작하질 않아서, 좋은 해결책을 발견할 때까지는 일단 포기 |
* 윈도우들의 순서를 바꾸고 싶을 때는 <code>swap-window</code>나 <code>move-window</code> 명령을 쓰면 되는데 그게 귀찮으니까 현재 윈도우를 왼쪽 또는 오른쪽 윈도우와 위치를 스왑하는 단축키를 <code>Ctrl+Shift+왼쪽(또는 오른쪽)커서키</code>로 지정해줌. <code>-n</code> 옵션을 주면 ''prefix''를 누르지 않고 바로 쓸 수 있다. ([http://superuser.com/a/552493 출처]) |
-217,14 +246,71 |
<code>:set-window-option automatic-rename on</code> |
=== # 서로 다른 세션 만들기, 세션 이름 붙이기 === |
한 세션에 윈도우 십 수개씩 띄워놓으니 이것도 정신 사납다. 세션을 여러 개 만들어서 각각 서버 프로그램 띄워두는 용도, 자잘한 작업하는 용도 등으로 구분하자. |
위에 기본 사용법에도 적었지만, 세션을 만들 때 이름을 따로 주고 |
<code>tmux new -s SERVICE</code> |
나중에 원하는 세션에 붙어서 작업 |
<code>tmux attach -t SERVICE</code> |
세션 이름을 처음에 짓지 않았다면 나중에 <code>prefix :</code> 명령 모드 들어가서 <code>rename-session</code> |
=== # 한 유저계정에서 서로 다른 설정을 따르는 tmux 세션 만들기 === |
예를 들어 어떤 서버에 web 이라는 계정이 있고, 여러 사람이 각자 그 계정으로 접속해서 작업하는데, 각자 자신이 선호하는 설정의 tmux 세션을 띄우고 싶다고 하자. 그런데 하나의 계정이기 때문에, 기본 상태에서는 제일 처음 tmux를 실행한 사람의 설정을 그대로 따라가서 두번째 사람부터는 <code>-f</code> 옵션을 써도 안 통한다. reload하면 다른 사람들까지 전부 바뀌어버린다. |
이런 경우는 <code>-L socket-name</code> 옵션을 써서 별개의 tmux 서버를 띄워 자신만의 독립적인 환경을 만들 수 있다. |
<code>tmux -L mysocket -f myconfig_file new-session</code> : 새 세션 만드는 경우 |
위 세션에 붙어 작업하고 싶다면 마찬가지로 <code>-L</code> 옵션을 쓴다. |
<code>tmux -L mysocket attach</code> |
=== # 한 유저계정에서 서로 다른 tmux 세션 만들기 === |
=== # 플러그인 === |
예를 들어 서버에 web 이라는 계정이 있고, 여러 사람이 각자 그 계정으로 접속해서 작업하는데, 각자 자신이 선호하는 설정의 tmux 세션을 띄우고 싶다고 하자. 그런데 하나의 계정이기 때문에, 기본 상태에서는 제일 처음 tmux를 실행한 사람의 설정을 그대로 따라가서 두번째 사람부터는 <code>-f</code> 옵션을 써도 안 통한다. reload하면 다른 사람들까지 전부 바뀌어버린다. |
잘은 모르겠는데 1.9 부터는 외부 플러그인을 가져와서 더 편한 기능을 덧붙여 쓸 수 있나보다. 게다가 그 플러그인들을 관리하는 툴도 또 따로 나왔다. |
* [https://github.com/tmux-plugins/tpm Tmux Plugin Manager] - conf 파일에 플러그인 이름만 적어주면 이 매니저가 알아서 다운받고 로드해준다. |
다른 플러그인은 모르겠고, 나중에 시스템 재부팅 등을 했을 때 tmux 세션과 윈도우 구성을 되살려주는 플러그인이 있더라. |
=== # 시스템 재부팅할 때 세션 복원 === |
바로 위에서 말했듯이, 이런 플러그인이 있더라. 간단히 써보면 일단 윈도 구성까지는 잘 살려주는데, 실행 중이던 프로그램까지 복원해주는 건 다시 좀 복잡하게 설정해야 하는 것 같음 |
* [https://github.com/tmux-plugins/tmux-resurrect Tmux Resurrect] |
=== # pane분할 또는 새 창에서 작업 디렉토리 유지 === |
처음 tmux를 실행하고 인상적이었던 건 새 윈도우를 열 때나 pane을 가로, 세로로 분할했을 때, screen은 처음에 screen을 실행한 디렉토리에서 셸이 뜨지만 tmux는 현재 작업하던 디렉토리가 유지되는 것이었다. |
그런데 1.9a를 설치하니까 그게 적용이 되지 않아서 살펴보니, 예전에는 <code>default-path</code> 설정이 있어서 그 값이 있다면 그 값을 새 창의 작업 디렉토리로 지정하고, 그 값이 없으면 현재 작업 디렉토리를 그대로 사용하게 했었나봄. 이제는 pane 분할 또는 새 창 생성 시에 <code>-c path</code> 옵션이 있고, <code>#{pane_current_path}</code>와 같은 미리 정의된 변수가 몇 가지 있어서 그것을 경로명 자리에 대신 줄 수도 있다. |
.conf 파일에 이걸 넣어서 기존과 같이 동작하도록 함. |
=== # 윈도우를 다른 세션으로 넘기거나 링크하기 === |
이쪽 세션에서 작업하던 윈도우를 다른 세션으로 넘기고 싶으면 |
<code>move-window -s chat:irc -t other_session</code> (세션:창 순으로 ID나 이름) |
다른 세션에서 링크를 걸어 두 세션 모두에서 쓸 수 있게 하려면 |
<code>link-window -s ... -t ...</code> |
이런 경우는 <code>-L socket-name</code> 옵션을 써서 서로 자신만의 독립적인 세션을 만들 수 있다. |
<code>tmux -L mysocket -f myconfig_file new-session</code> : 세션 만드는 경우 |
-246,7 +332,13 |
여기 답글에 있는 것처럼 <code>killall -10 tmux</code> 후 재시도하니 성공 |
=== # 인덱스 10 이상의 윈도우로 한 번에 점프하기 === |
<code>prefix 0~9</code>로 이동하는 것은 인덱스 10 이상의 윈도우에는 쓸 수 없다. |
* [http://superuser.com/a/764108 How to quickly switch to n.10+ windows in tmux] |
* <code>prefix '</code> 후에 인덱스 번호를 입력하고 엔터 |
* <code>prefix w</code> 하면 윈도우 리스트가 뜨는데, 이 때 좌측에 있는 0-9a-z 까지의 문자를 누르면 바로 이동한다. |
== # Comments == |
control.c:103: error: ‘EVBUFFER_EOL_LF’ undeclared (first use in this function)이건 의존성이 걸려 있는 libevent 의 버전이 낮아서 생긴 문제. yum 으로 설치한 게 1.4.13 이었는데 [이 글]을 보니 1.4.14나 2.0이 필요하다고 함. 그래서 libevent 를 따로 다운받아 컴파일,설치하여야 했음. 게다가 기존 1.4.13을 지우지 않았더만 링킹 과정에서 그게 먼저 적용되었는지 다음과 같은 형태의 에러가 줄줄이 났고
undefined reference to `bufferevent_write'1.4.13을 지우고 나서 시도하니 컴파일이 거의 다 잘 되었는데 막판에
undefined reference to `__b64_ntop'이 에러가 났는데, [이 글]을 참고해서
Makefile
의 LIBS
변수의 값에다가 -lresolv
를 넣어주니 해결되었음.
prefix
에 해당하는 키는 C-b
인데, 이건 vi의 스크롤과 충동하기도 하고 누르기도 불편하여 screen과 같이 C-a
로 설정함
시작과 종료
# reload conf # prefix r 을 누르면 .tmux.conf 를 읽어서 적용 bind r source-file ~/.tmux.conf \; display "Reloaded!" # Ctrl+a 를 prefix 로 set -g prefix C-a unbind C-b bind C-a send-prefix # visual bell set-option -g visual-bell on # pane 분할을 | 와 - 로 # 현재 pane의 cwd를 이어받도록 함 bind | split-window -h -c "#{pane_current_path}" bind \ split-window -h -c "#{pane_current_path}" bind - split-window -v -c "#{pane_current_path}" # 새 window 생성 때도 현재 cwd를 사용 bind c new-window -c "#{pane_current_path}" # 직전에 사용하던 윈도우 이동 bind a last-window # C-o, o 둘 다 pane이동으로. rotate는 안 쓰니까 C-p로 이동 bind C-p rotate-window bind C-o select-pane -t :.+ # monitor activity and silence set-window-option -g monitor-activity on # set-option -g visual-activity on set-window-option -g monitor-silence 0 bind S set-window-option monitor-silence 30 bind M-s set-window-option monitor-silence 0 # window 번호를 0이 아니라 1부터 set-option -g base-index 1 # pane 번호를 0이 아니라 1부터 set-window-option -g pane-base-index 1 # window swap bind-key -n C-S-Left swap-window -t -1 bind-key -n C-S-Right swap-window -t +1 # 상태바 설정 # default statusbar colors set-option -g status-bg blue set-option -g status-fg white set-option -g status-attr default # default window title colors set-window-option -g window-status-fg white set-window-option -g window-status-bg default set-window-option -g window-status-attr dim # active window title colors set-window-option -g window-status-current-fg white set-window-option -g window-status-current-bg red set-window-option -g window-status-current-attr bold # pane border set-option -g pane-border-fg colour235 #base02 set-option -g pane-active-border-fg colour240 #base0f # message text set-option -g message-bg colour235 #base02 set-option -g message-fg colour166 #orange # pane number display set-option -g display-panes-active-colour colour33 #blue set-option -g display-panes-colour colour166 #orange # clock set-window-option -g clock-mode-colour colour64 #green # mouse는 일단 끔 setw -g mode-mouse off set -g mouse-select-pane off set -g mouse-resize-pane off set -g mouse-select-window off # 윈도우를 닫으면, 남은 윈도우들의 번호를 다시 0부터 순차적으로 재정리 set-option -g renumber-windows on # List of plugins # Supports `github_username/repo` or full git repo URLs set -g @tpm_plugins ' \ tmux-plugins/tpm \ tmux-plugins/tmux-resurrect \ ' # Other examples: # github_username/plugin_name \ # git@github.com/user/plugin \ # git@bitbucket.com/user/plugin \ # Initializes TMUX plugin manager. # Keep this line at the very bottom of tmux.conf. # prefix+I - install new plugin and refresh # prefix+U - update plugin(s) run-shell '~/.tmux/plugins/tpm/tpm'
:source-file
명령으로 실행 도중에 설정 파일을 읽어서 적용시킬 수 있는데, 이게 또 매번 입력해주기 귀찮으니 prefix r을 누르면 되도록 함
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "
라고 적어줬어야 했다.
swap-window
나 move-window
명령을 쓰면 되는데 그게 귀찮으니까 현재 윈도우를 왼쪽 또는 오른쪽 윈도우와 위치를 스왑하는 단축키를 Ctrl+Shift+왼쪽(또는 오른쪽)커서키
로 지정해줌. -n
옵션을 주면 prefix를 누르지 않고 바로 쓸 수 있다. ([출처])
tmux -2
라고 해야 256컬러 지원이 됨
-2
옵션을 주어도 마찬가지.
TERM
변수의 값이 xterm
이었는데 이 상태에서는 8컬러까지만 지원하는 걸로 tmux가 인식하나보다. TERM변수의 값을 xterm-16color
로 설정하고 실행하니까 제대로 되었다. (오히려 -2
옵션이 없어도 되더라)
나는 아예 alias를 써서 tmux를 실행하면 TERM=xterm-16color tmux -2
를 실행하도록 하였음.
tmux -f 파일명
으로 해당 파일을 로드해서 실행할 수 있으나, 이 설정 파일의 내용을 보면 자기 멋대로 여러 개의 창을 만들고 어떤 창에서는 mutt를 실행하는 등의 동작을 하도록 되어 있으니 주의.
그리고 설정 파일을 VimEditor로 편집할 때 신택스 하일라이트를 적용할 수 있다. tmux.vim 파일의 주석에 적힌 설명 참조.
prefix ,
또는 :rename-window
로 이름을 지정하면 그 이름으로 고정되어 버리는데, 이걸 다시 원래대로 자동으로 프로세스 이름이 반영되게 하고 싶으면 다음처럼 automatic-rename 옵션을 켜주면 됨. (이 옵션이 원래 켜져 있다가 이름을 수동으로 바꾸면 저절로 꺼지는 식이다)
:set-window-option automatic-rename on
tmux new -s SERVICE
나중에 원하는 세션에 붙어서 작업
tmux attach -t SERVICE
세션 이름을 처음에 짓지 않았다면 나중에 prefix :
명령 모드 들어가서 rename-session
-f
옵션을 써도 안 통한다. reload하면 다른 사람들까지 전부 바뀌어버린다.
이런 경우는 -L socket-name
옵션을 써서 별개의 tmux 서버를 띄워 자신만의 독립적인 환경을 만들 수 있다.
tmux -L mysocket -f myconfig_file new-session
: 새 세션 만드는 경우
위 세션에 붙어 작업하고 싶다면 마찬가지로 -L
옵션을 쓴다.
tmux -L mysocket attach
default-path
설정이 있어서 그 값이 있다면 그 값을 새 창의 작업 디렉토리로 지정하고, 그 값이 없으면 현재 작업 디렉토리를 그대로 사용하게 했었나봄. 이제는 pane 분할 또는 새 창 생성 시에 -c path
옵션이 있고, #{pane_current_path}
와 같은 미리 정의된 변수가 몇 가지 있어서 그것을 경로명 자리에 대신 줄 수도 있다.
.conf 파일에 이걸 넣어서 기존과 같이 동작하도록 함.
move-window -s chat:irc -t other_session
(세션:창 순으로 ID나 이름)
다른 세션에서 링크를 걸어 두 세션 모두에서 쓸 수 있게 하려면
link-window -s ... -t ...
killall -10 tmux
후 재시도하니 성공
prefix 0~9
로 이동하는 것은 인덱스 10 이상의 윈도우에는 쓸 수 없다.
prefix '
후에 인덱스 번호를 입력하고 엔터
prefix w
하면 윈도우 리스트가 뜨는데, 이 때 좌측에 있는 0-9a-z 까지의 문자를 누르면 바로 이동한다.