TMux: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
| (90 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{|class='wikitable' style='width:100%;margin:-11px 0 6px 0' | |||
|valign='top'| | |||
<code>tmux</code> is an open-source terminal multiplexer for Unix-like operating systems. It allows multiple terminal sessions to be accessed simultaneously in a single window. It is useful for running more than one command-line program at the same time. | <code>tmux</code> is an open-source terminal multiplexer for Unix-like operating systems. It allows multiple terminal sessions to be accessed simultaneously in a single window. It is useful for running more than one command-line program at the same time. | ||
|} | |||
== | ==Shortcuts== | ||
< | {|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | ||
!scope='col' style='text-align:left' colspan='2'| | |||
Shortcuts | |||
|- | |||
|valign='top' style='width:50%'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
tmux ls » Session list | |||
tmux a -t 0…9 » Session attach to | |||
tmux attach -t 0…9 » Session attach to | |||
Ctrl + a → d » Session detach from | |||
Ctrl + a → r » Session reload config | |||
</syntaxhighlight> | |||
|valign='top' style='width:50%'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
Ctrl + a → Ctrl + s » Session save | |||
Ctrl + a → Ctrl + r » Session restore | |||
Ctrl + z » Send job background | |||
bg/jobs » Background job list | |||
bg 0…9 » Bring to foreground | |||
</syntaxhighlight> | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
Ctrl + a → : » Enter command mode | |||
Win + Nav » Move to Monitor | |||
Win + Tab » Focus to Monitor | |||
</syntaxhighlight> | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
Ctrl + a → ? » List key bindings | |||
~ + . » Kill SSH Session | |||
</syntaxhighlight> | |||
|- | |||
!scope='col' style='text-align:left'|session | |||
!scope='col' style='text-align:left'|window | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
Ctrl + a → w » Session and Window Preview | |||
Ctrl + a → ( » Move to previous session | |||
Ctrl + a → ) » Move to next session | |||
Ctrl + a → d » Detach from session | |||
Ctrl + a → s » Show all sessions | |||
Ctrl + a → $ » Rename session | |||
Ctrl + a → ʘ » | |||
Ctrl + a → ʘ » | |||
</syntaxhighlight> | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
Ctrl + a → n » Next window | |||
Ctrl + a → w » List windows | |||
Ctrl + a → p » Previous window | |||
Ctrl + a → c » Create a new window | |||
Ctrl + a → & » Close active window | |||
Ctrl + a → , » Rename active window | |||
Ctrl + a → 1 » Toggle last active window | |||
Ctrl + a → 0…9 » Switch to window by number | |||
</syntaxhighlight> | |||
|- | |||
!scope='col' style='text-align:left'|pane | |||
!scope='col' style='text-align:left'|pane | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
Ctrl + a → x » Close active pane | |||
Ctrl + a → q » Show pane numbers | |||
Ctrl + a → q + 0…9 » Switch pane by number | |||
Ctrl + a → | » Split pane vertically | |||
Ctrl + a → - » Split pane horizontally | |||
Ctrl + a → ; » Toggle last active pane | |||
Ctrl + a → z » Toggle active pane zoom | |||
Ctrl + a → { » Move the active pane left | |||
Ctrl + a → } » Move the active pane right | |||
Ctrl + a → ! » Convert pane into a window | |||
</syntaxhighlight> | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
Ctrl + a → Ctrl + ← » Pane width resize | |||
Ctrl + a → Ctrl + → » Pane width resize | |||
Ctrl + a → Ctrl + ↑ » Pane height resize | |||
Ctrl + a → Ctrl + ↓ » Pane height resize | |||
Ctrl + a → ↑ » Switch to pane up | |||
Ctrl + a → ↓ » Switch to pane down | |||
Ctrl + a → o » Switch to next pane | |||
Ctrl + a → ← » Switch to pane left | |||
Ctrl + a → → » Switch to pane right | |||
Ctrl + a → Spacebar » Toggle between pane layouts | |||
</syntaxhighlight> | |||
|- | |||
!scope='col' style='text-align:left'|vi copy | |||
!scope='col' style='text-align:left'|vi copy | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
Ctrl + a → [ » Enter copy mode | |||
Ctrl + a → PgUp » Copy mode & scroll one page up | |||
→ g » Go to top line | |||
→ G » Go to bottom line | |||
→ h » Move cursor left | |||
→ j » Move cursor down | |||
→ k » Move cursor up | |||
→ l » Move cursor right | |||
→ w » Move cursor forward one word | |||
→ b » Move cursor backward one word | |||
</syntaxhighlight> | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='text'> | |||
→ q » Quit mode | |||
→ ↑ » Scroll up | |||
→ ↓ » Scroll down | |||
→ / » Search forward | |||
→ ? » Search backward | |||
→ Spacebar » Start selection | |||
→ Esc » Clear selection | |||
→ n » Next keyword occurrence | |||
→ N » Previous keyword occurrence | |||
Ctrl + a → ] » Paste contents of buffer_0 | |||
</syntaxhighlight> | |||
|} | |||
==Installation== | |||
{|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | |||
!scope='col' style='text-align:left'| | |||
Installation | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
sudo apt install tmux | sudo apt install tmux | ||
sudo apt install powerline | sudo apt install powerline | ||
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm | |||
git clone https://github.com/tmux-plugins/tmux-yank ~/.tmux/plugins/tmux-yank | |||
git clone https://github.com/tmux-plugins/tmux-battery ~/.tmux/plugins/tmux-battery | |||
git clone https://github.com/tmux-plugins/tmux-sensible ~/.tmux/plugins/tmux-sensible | |||
git clone https://github.com/tmux-plugins/tmux-resurrect ~/.tmux/plugins/tmux-resurrect | |||
git clone https://github.com/tmux-plugins/tmux-continuum ~/.tmux/plugins/tmux-continuum | |||
git clone https://github.com/tmux-plugins/tmux-prefix-highlight ~/.tmux/plugins/tmux-prefix-highlight | |||
cat << EOF | tee ${HOME}/.tmux.conf >/dev/null | cat << EOF | tee ${HOME}/.tmux.conf >/dev/null | ||
| Line 15: | Line 156: | ||
set -g default-terminal 'screen-256color' | set -g default-terminal 'screen-256color' | ||
set -g history-limit 10000 | set -g history-limit 10000 | ||
# window/pane split | # window/pane split | ||
| Line 23: | Line 162: | ||
unbind '"' | unbind '"' | ||
unbind % | unbind % | ||
# list of plugins | |||
set -g @plugin 'tmux-plugins/tpm' | |||
set -g @plugin 'tmux-plugins/tmux-yank' | |||
set -g @plugin 'tmux-plugins/tmux-battery' | |||
set -g @plugin 'tmux-plugins/tmux-sensible' | |||
set -g @plugin 'tmux-plugins/tmux-prefix-highlight' | |||
# initialize tmux plugin manager | |||
run '~/.tmux/plugins/tpm/tpm' | |||
EOF | EOF | ||
</source> | </syntaxhighlight> | ||
|} | |||
== Powerline == | |||
{|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | |||
!scope='col' style='text-align:left'| | |||
Powerline | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
sudo apt install build-essential libssl-dev libffi-dev libgmp3-dev libpq-dev | |||
sudo apt install python-is-python3 python3-dev python3-pip python3-venv | |||
python3 -m venv ~/.venv/powerline --prompt="Powerline" | |||
source ~/.venv/powerline/bin/activate | |||
pip install wheel | |||
pip install powerline-status | |||
</syntaxhighlight> | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
# powerline font installation: | |||
# ──────────────────────────── | |||
git clone https://github.com/powerline/fonts.git --depth=1 | |||
./fonts/install.sh && rm -rf fonts/ | |||
ls -lah ${HOME}/.local/share/fonts/ | |||
</syntaxhighlight> | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
# powerline daemon config: | |||
# ──────────────────────── | |||
mkdir -p ${HOME}/.config/powerline | |||
cp -r ${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/config_files/* ${HOME}/.config/powerline/ | |||
powerline-daemon --replace | |||
</syntaxhighlight> | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
echo -E "$(jq '(.ext.shell|select(.theme=="default")).theme="default_leftonly"'\ | |||
${HOME}/.config/powerline/config.json)">\ | |||
${HOME}/.config/powerline/config.json | |||
echo -E "$(jq '(.segments.left[]|select(.function=="powerline.segments.common.vcs.branch")).args={"status_colors":true}'\ | |||
${HOME}/.config/powerline/themes/shell/default_leftonly.json)">\ | |||
${HOME}/.config/powerline/themes/shell/default_leftonly.json | |||
</syntaxhighlight> | |||
|- | |||
!scope='col' style='text-align:left'|Powerline » Vim | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
# ~/.vimrc | |||
set rtp+=${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/bindings/vim/ | |||
set laststatus=2 | |||
</syntaxhighlight> | |||
|- | |||
!scope='col' style='text-align:left'|Powerline » Bash | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
# powerline configuration | |||
if [ -f ${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/bindings/bash/powerline.sh ]; then | |||
powerline-daemon -q | |||
POWERLINE_BASH_CONTINUATION=1 | |||
POWERLINE_BASH_SELECT=1 | |||
source ${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/bindings/bash/powerline.sh | |||
fi | |||
</syntaxhighlight> | |||
|- | |||
!scope='col' style='text-align:left'|Powerline » TMux | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
# ~/.tmux.conf | |||
set -g default-terminal "screen-256color" | |||
source "${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/bindings/tmux/powerline.conf" | |||
</syntaxhighlight> | |||
|- | |||
!scope='col' style='text-align:left'|Powerline » Code | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
# Debian | |||
echo -E "$(jq '."terminal.integrated.fontFamily"="Source Code Pro for Powerline"'\ | |||
${HOME}/.config/Code/User/settings.json)">\ | |||
${HOME}/.config/Code/User/settings.json | |||
# MacOS | |||
echo -E "$(jq '."terminal.integrated.fontFamily"="Source Code Pro for Powerline"'\ | |||
${HOME}/Library/Application Support/Code/User/settings.json)">\ | |||
${HOME}/Library/Application Support/Code/User/settings.json | |||
</syntaxhighlight> | |||
|} | |||
==Knowledge== | ==Knowledge== | ||
{| | {|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | ||
|valign= | !scope='col' style='text-align:left' colspan='3'| | ||
Knowledge | |||
|- | |||
|valign='top' style='width:33%'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
tmux ls | |||
tmux new -s my_session | |||
tmux attach-session -t 0 | |||
tmux attach-session -t my_session | |||
Ctrl + a % » Split pane horizontally | |||
Ctrl + a " » Split pane vertically | |||
Ctrl + a x » Close current pane | |||
</syntaxhighlight> | |||
|valign= | |valign='top' style='width:34%'| | ||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
Ctrl + a c » Create a new window | |||
Ctrl + a w » Choose window from a list | |||
Ctrl + a 0 » Switch to window by number | |||
Ctrl + a , » Rename the current window | |||
Ctrl + a o » Go to the next pane | |||
Ctrl + a ; » Toggle between pane | |||
Ctrl + a d » Detach the session | |||
</syntaxhighlight> | |||
|valign='top' style='width:33%'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
tmux ls | |||
tmux kill-server | |||
tmux list-sessions | |||
tmux kill-session -a | |||
tmux kill-session -t {index} | |||
pkill -f tmux | |||
ps aux | grep tmux | |||
</syntaxhighlight> | |||
|- | |||
|valign='top' colspan='3'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
python3 -V|perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' | |||
python3 -V|perl -pe '($_)=/([0-9]+[.][0-9]+)/' | |||
python3 -V|perl -pe '($_)=/([0-9]+)/ | |||
</syntaxhighlight> | |||
|- | |- | ||
|colspan=" | |valign='top' colspan='3'| | ||
---- | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
alias extractor=$'perl -pe \'if(($v)=/([0-9]+([.][0-9]+)+)/){print"$v\n";exit}$_=""\'' | |||
mvn --version|extractor|perl -pe '($_)=/([0-9]+[.][0-9]+)/' | |||
mvn --version|extractor|perl -pe '($_)=/([0-9]+)/' | |||
mvn --version|extractor | |||
</syntaxhighlight> | |||
|- | |- | ||
|valign= | |valign='top' colspan='3'| | ||
< | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
GIT_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'git' 2>&1)" | |||
if [[ ! $? -eq 0 ]]||[[ ! "${GIT_INSTALL_STATUS}" -eq 'installed' ]];then | |||
printf 'sudo apt install --yes \033[0;31mgit \033[0m\n';exit 1 | |||
fi | |||
TMUX_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'tmux' 2>&1)" | TMUX_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'tmux' 2>&1)" | ||
if [[ ! $? -eq 0 ]]||[[ ! "${TMUX_INSTALL_STATUS}" -eq 'installed' ]];then | if [[ ! $? -eq 0 ]]||[[ ! "${TMUX_INSTALL_STATUS}" -eq 'installed' ]];then | ||
printf ' | printf 'sudo apt install --yes \033[0;31mtmux \033[0m\n';exit 1 | ||
fi | fi | ||
POWERLINE_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'powerline' 2>&1)" | POWERLINE_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'powerline' 2>&1)" | ||
if [[ ! $? -eq 0 ]]||[[ ! "${POWERLINE_INSTALL_STATUS}" -eq 'installed' ]];then | if [[ ! $? -eq 0 ]]||[[ ! "${POWERLINE_INSTALL_STATUS}" -eq 'installed' ]];then | ||
printf ' | printf 'sudo apt install --yes \033[0;31mpowerline \033[0m\n';exit 1 | ||
fi | |||
</syntaxhighlight> | |||
|- | |||
|valign='top' colspan='3'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
PYTHON3_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'python3' 2>&1)" | |||
if [[ ! $? -eq 0 ]]||[[ ! "${PYTHON3_INSTALL_STATUS}" -eq 'installed' ]];then | |||
printf 'sudo apt install --yes \033[0;31mpython3 \033[0m\n';exit 1 | |||
fi | |||
PYTHON3_PIP_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'python3-pip' 2>&1)" | |||
if [[ ! $? -eq 0 ]]||[[ ! "${PYTHON3_PIP_INSTALL_STATUS}" -eq 'installed' ]];then | |||
printf 'sudo apt install --yes \033[0;31mpython3-pip \033[0m\n';exit 1 | |||
fi | |||
PYTHON3_VENV_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'python3-venv' 2>&1)" | |||
if [[ ! $? -eq 0 ]]||[[ ! "${PYTHON3_VENV_INSTALL_STATUS}" -eq 'installed' ]];then | |||
printf 'sudo apt install --yes \033[0;31mpython3-venv \033[0m\n';exit 1 | |||
fi | fi | ||
</source> | </syntaxhighlight> | ||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='PowerShell'> | |||
python3 -m site --user-site | |||
python3 -m site | grep packages | |||
python3 -m sysconfig | grep packages | |||
</syntaxhighlight> | |||
|valign="top" colspan="2"| | |||
<syntaxhighlight style='margin:3px 0' lang='PowerShell'> | |||
# windows 11 | |||
C:\> py -c "import sysconfig; print(sysconfig.get_path('purelib'))" | |||
python3 -c "import sysconfig; print(sysconfig.get_path('purelib'))" | |||
</syntaxhighlight> | |||
|- | |||
|valign='top' colspan='3'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
python3 -m venv ~/.venv/powerline --prompt="Powerline" | |||
# source .venv/bin/activate | |||
# (Powerline) $ | |||
</syntaxhighlight> | |||
|- | |||
|valign='top' colspan='3'| | |||
<syntaxhighlight style='margin:3px 0' lang='PowerShell'> | |||
python -m venv ~/.venv/powerline --prompt="Powerline" | |||
# .venv\Scripts\activate | |||
# (Powerline) PS> | |||
</syntaxhighlight> | |||
|- | |||
|valign='top' colspan='3'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
uptime | cut -f 4-5 -d ' ' | cut -f 1 -d ',' | |||
</syntaxhighlight> | |||
|- | |||
|valign='top' colspan='3'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
cat ${HOME}/.config/powerline/config.json|jq '.ext.shell.theme' | |||
cat ${HOME}/.config/powerline/themes/shell/default_leftonly.json|\ | |||
jq '.segments.left[].function' | |||
</syntaxhighlight> | |||
|- | |||
|valign='top' colspan='3'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
jq '.ext.shell|select(.theme=="default")' ${HOME}/.config/powerline/config.json | |||
jq '.segments.left[]|select(.function=="powerline.segments.common.vcs.branch")'\ | |||
${HOME}/.config/powerline/themes/shell/default_leftonly.json | |||
</syntaxhighlight> | |||
|- | |||
|valign='top' colspan='3'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
cat ${HOME}/.config/powerline/config.json |\ | |||
jq '.ext.shell|select(.theme=="default")|.theme="default_leftonly"' | |||
|valign=" | cat ${HOME}/.config/powerline/themes/shell/default_leftonly.json |\ | ||
jq '.segments.left[]|select(.function=="powerline.segments.common.vcs.branch")|.args={"status_colors":true}' | |||
</syntaxhighlight> | |||
|- | |||
|valign='top' colspan='3'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
jq '(.ext.shell|select(.theme=="default")).theme="default_leftonly"'\ | |||
${HOME}/.config/powerline/config.json | |||
jq '(.segments.left[]|select(.function=="powerline.segments.common.vcs.branch")).args={"status_colors":true}'\ | |||
${HOME}/.config/powerline/themes/shell/default_leftonly.json | |||
</syntaxhighlight> | |||
|} | |} | ||
==References== | ==References== | ||
{| | {|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | ||
| valign= | !scope='col' style='text-align:left' colspan='3'| | ||
References | |||
|- | |||
|valign='top' style='width:33%'| | |||
* [https://tmuxcheatsheet.com/ TMux » Cheat Sheet & Quick Reference] | * [https://tmuxcheatsheet.com/ TMux » Cheat Sheet & Quick Reference] | ||
* [https://stackoverflow.com/questions/1298066/how-can-i-check-if-a-package-is-installed-and-install-it-if-not/54239534#54239534 Check if a package is installed or not] | * [https://stackoverflow.com/questions/1298066/how-can-i-check-if-a-package-is-installed-and-install-it-if-not/54239534#54239534 Check if a package is installed or not] | ||
| Line 85: | Line 443: | ||
* [[Bash]] | * [[Bash]] | ||
| valign= | |valign='top' style='width:34%'| | ||
* [https://stackoverflow.com/questions/122327/ Find Out Python <code>site-packages</code> Directory] | |||
* [https://www.ricalo.com/blog/install-powerline-virtualenv/ Powerline in a Python virtual environment] | |||
* [https://www.ricalo.com/blog/install-powerline-ubuntu/ Installing Powerline on Ubuntu Linux] | |||
* [https://www.hanselman.com/blog/my-ultimate-powershell-prompt-with-oh-my-posh-and-the-windows-terminal PowerShell prompt with Oh My Posh] | |||
* [https://medium.com/codex/how-to-pimp-my-powerline-in-powershell-156f4e4936e Pimp my Powerline in PowerShell] | |||
* [https://stackoverflow.com/questions/42716734/ JSON file in-place using <code>jq</code>] | |||
* [https://askubuntu.com/questions/868186/ TMux » Kill All Sessions] | * [https://askubuntu.com/questions/868186/ TMux » Kill All Sessions] | ||
* [https://github.com/vim-airline/vim-airline <code>vim-airline</code> Project] | |||
* [https://superuser.com/questions/285381/ TMux » Color Palette] | |||
* [[JQ Tool]] | |||
|valign='top' style='width:33%'| | |||
* [https://stackoverflow.com/questions/45017773/ TMux » <code>set -g</code>, <code>set -ga</code>, <code>setw -g</code> vs. <code>set-option -g</code>] | |||
* [https://stackoverflow.com/questions/81272/ Move the cursor word by word in the OS X Terminal] | |||
* [https://linuxhandbook.com/run-process-background/ Running Linux Process in Background & Foreground] | |||
* [https://unix.stackexchange.com/questions/214192/ <code>rpm --querytags</code> & <code>rpm -q --queryformat</code>] | |||
* [https://unix.stackexchange.com/questions/52144/ TMux » Eclipsed colorized output of ls] | |||
* [https://towardsdatascience.com/how-to-boost-10x-productivity-with-tmux-ead3d3d452f9 Boost 10X Productivity with Tmux] | |||
* [https://devguide.python.org/versions/ Status of Python Versions] | |||
* [https://pkgs.alpinelinux.org/packages?name=powerline-*&branch=edge Alpine Linux Powerline] | |||
* [https://wiki.archlinux.org/title/Powerline ArchLinux Powerline] | |||
* [https://stackoverflow.com/questions/2032747/ <code>.vimrc</code> Comments] | |||
|- | |||
|valign='top'| | |||
* [https://github.com/tmux/tmux/wiki TMux » Wiki] | |||
| valign= | |valign='top'| | ||
|valign='top'| | |||
|- | |- | ||
| | |valign='top'| | ||
* [[Linux User Creation]] | |||
* [[AwesomeWM]] | |||
* [[Neovim]] | |||
* [[PyEnv]] | |||
* [[7Zip]] | |||
* [[Zsh]] | |||
* [[Zip]] | |||
* [[Tar]] | |||
| valign= | |valign='top'| | ||
| valign= | |valign='top'| | ||
|} | |} | ||
Latest revision as of 13:05, 16 January 2026
|
|
Shortcuts
|
Shortcuts | |
|---|---|
tmux ls » Session list
tmux a -t 0…9 » Session attach to
tmux attach -t 0…9 » Session attach to
Ctrl + a → d » Session detach from
Ctrl + a → r » Session reload config
|
Ctrl + a → Ctrl + s » Session save
Ctrl + a → Ctrl + r » Session restore
Ctrl + z » Send job background
bg/jobs » Background job list
bg 0…9 » Bring to foreground
|
Ctrl + a → : » Enter command mode
Win + Nav » Move to Monitor
Win + Tab » Focus to Monitor
|
Ctrl + a → ? » List key bindings
~ + . » Kill SSH Session
|
| session | window |
Ctrl + a → w » Session and Window Preview
Ctrl + a → ( » Move to previous session
Ctrl + a → ) » Move to next session
Ctrl + a → d » Detach from session
Ctrl + a → s » Show all sessions
Ctrl + a → $ » Rename session
Ctrl + a → ʘ »
Ctrl + a → ʘ »
|
Ctrl + a → n » Next window
Ctrl + a → w » List windows
Ctrl + a → p » Previous window
Ctrl + a → c » Create a new window
Ctrl + a → & » Close active window
Ctrl + a → , » Rename active window
Ctrl + a → 1 » Toggle last active window
Ctrl + a → 0…9 » Switch to window by number
|
| pane | pane |
Ctrl + a → x » Close active pane
Ctrl + a → q » Show pane numbers
Ctrl + a → q + 0…9 » Switch pane by number
Ctrl + a → | » Split pane vertically
Ctrl + a → - » Split pane horizontally
Ctrl + a → ; » Toggle last active pane
Ctrl + a → z » Toggle active pane zoom
Ctrl + a → { » Move the active pane left
Ctrl + a → } » Move the active pane right
Ctrl + a → ! » Convert pane into a window
|
Ctrl + a → Ctrl + ← » Pane width resize
Ctrl + a → Ctrl + → » Pane width resize
Ctrl + a → Ctrl + ↑ » Pane height resize
Ctrl + a → Ctrl + ↓ » Pane height resize
Ctrl + a → ↑ » Switch to pane up
Ctrl + a → ↓ » Switch to pane down
Ctrl + a → o » Switch to next pane
Ctrl + a → ← » Switch to pane left
Ctrl + a → → » Switch to pane right
Ctrl + a → Spacebar » Toggle between pane layouts
|
| vi copy | vi copy |
Ctrl + a → [ » Enter copy mode
Ctrl + a → PgUp » Copy mode & scroll one page up
→ g » Go to top line
→ G » Go to bottom line
→ h » Move cursor left
→ j » Move cursor down
→ k » Move cursor up
→ l » Move cursor right
→ w » Move cursor forward one word
→ b » Move cursor backward one word
|
→ q » Quit mode
→ ↑ » Scroll up
→ ↓ » Scroll down
→ / » Search forward
→ ? » Search backward
→ Spacebar » Start selection
→ Esc » Clear selection
→ n » Next keyword occurrence
→ N » Previous keyword occurrence
Ctrl + a → ] » Paste contents of buffer_0
|
Installation
|
Installation |
|---|
sudo apt install tmux
sudo apt install powerline
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
git clone https://github.com/tmux-plugins/tmux-yank ~/.tmux/plugins/tmux-yank
git clone https://github.com/tmux-plugins/tmux-battery ~/.tmux/plugins/tmux-battery
git clone https://github.com/tmux-plugins/tmux-sensible ~/.tmux/plugins/tmux-sensible
git clone https://github.com/tmux-plugins/tmux-resurrect ~/.tmux/plugins/tmux-resurrect
git clone https://github.com/tmux-plugins/tmux-continuum ~/.tmux/plugins/tmux-continuum
git clone https://github.com/tmux-plugins/tmux-prefix-highlight ~/.tmux/plugins/tmux-prefix-highlight
cat << EOF | tee ${HOME}/.tmux.conf >/dev/null
set -g base-index 1
# remap prefix from 'c-b' to 'c-a'
unbind C-b
set-option -g prefix c-a
bind-key c-a send-prefix
set -g default-terminal 'screen-256color'
set -g history-limit 10000
# window/pane split
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
# list of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-battery'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
# initialize tmux plugin manager
run '~/.tmux/plugins/tpm/tpm'
EOF
|
Powerline
|
Powerline |
|---|
sudo apt install build-essential libssl-dev libffi-dev libgmp3-dev libpq-dev
sudo apt install python-is-python3 python3-dev python3-pip python3-venv
python3 -m venv ~/.venv/powerline --prompt="Powerline"
source ~/.venv/powerline/bin/activate
pip install wheel
pip install powerline-status
|
# powerline font installation:
# ────────────────────────────
git clone https://github.com/powerline/fonts.git --depth=1
./fonts/install.sh && rm -rf fonts/
ls -lah ${HOME}/.local/share/fonts/
|
# powerline daemon config:
# ────────────────────────
mkdir -p ${HOME}/.config/powerline
cp -r ${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/config_files/* ${HOME}/.config/powerline/
powerline-daemon --replace
|
echo -E "$(jq '(.ext.shell|select(.theme=="default")).theme="default_leftonly"'\
${HOME}/.config/powerline/config.json)">\
${HOME}/.config/powerline/config.json
echo -E "$(jq '(.segments.left[]|select(.function=="powerline.segments.common.vcs.branch")).args={"status_colors":true}'\
${HOME}/.config/powerline/themes/shell/default_leftonly.json)">\
${HOME}/.config/powerline/themes/shell/default_leftonly.json
|
| Powerline » Vim |
# ~/.vimrc
set rtp+=${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/bindings/vim/
set laststatus=2
|
| Powerline » Bash |
# powerline configuration
if [ -f ${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/bindings/bash/powerline.sh ]; then
powerline-daemon -q
POWERLINE_BASH_CONTINUATION=1
POWERLINE_BASH_SELECT=1
source ${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/bindings/bash/powerline.sh
fi
|
| Powerline » TMux |
# ~/.tmux.conf
set -g default-terminal "screen-256color"
source "${HOME}/.venv/powerline/lib/python3.10/site-packages/powerline/bindings/tmux/powerline.conf"
|
| Powerline » Code |
# Debian
echo -E "$(jq '."terminal.integrated.fontFamily"="Source Code Pro for Powerline"'\
${HOME}/.config/Code/User/settings.json)">\
${HOME}/.config/Code/User/settings.json
# MacOS
echo -E "$(jq '."terminal.integrated.fontFamily"="Source Code Pro for Powerline"'\
${HOME}/Library/Application Support/Code/User/settings.json)">\
${HOME}/Library/Application Support/Code/User/settings.json
|
Knowledge
|
Knowledge | ||
|---|---|---|
tmux ls
tmux new -s my_session
tmux attach-session -t 0
tmux attach-session -t my_session
Ctrl + a % » Split pane horizontally
Ctrl + a " » Split pane vertically
Ctrl + a x » Close current pane
|
Ctrl + a c » Create a new window
Ctrl + a w » Choose window from a list
Ctrl + a 0 » Switch to window by number
Ctrl + a , » Rename the current window
Ctrl + a o » Go to the next pane
Ctrl + a ; » Toggle between pane
Ctrl + a d » Detach the session
|
tmux ls
tmux kill-server
tmux list-sessions
tmux kill-session -a
tmux kill-session -t {index}
pkill -f tmux
ps aux | grep tmux
|
python3 -V|perl -pe '($_)=/([0-9]+([.][0-9]+)+)/'
python3 -V|perl -pe '($_)=/([0-9]+[.][0-9]+)/'
python3 -V|perl -pe '($_)=/([0-9]+)/
| ||
alias extractor=$'perl -pe \'if(($v)=/([0-9]+([.][0-9]+)+)/){print"$v\n";exit}$_=""\''
mvn --version|extractor|perl -pe '($_)=/([0-9]+[.][0-9]+)/'
mvn --version|extractor|perl -pe '($_)=/([0-9]+)/'
mvn --version|extractor
| ||
GIT_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'git' 2>&1)"
if [[ ! $? -eq 0 ]]||[[ ! "${GIT_INSTALL_STATUS}" -eq 'installed' ]];then
printf 'sudo apt install --yes \033[0;31mgit \033[0m\n';exit 1
fi
TMUX_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'tmux' 2>&1)"
if [[ ! $? -eq 0 ]]||[[ ! "${TMUX_INSTALL_STATUS}" -eq 'installed' ]];then
printf 'sudo apt install --yes \033[0;31mtmux \033[0m\n';exit 1
fi
POWERLINE_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'powerline' 2>&1)"
if [[ ! $? -eq 0 ]]||[[ ! "${POWERLINE_INSTALL_STATUS}" -eq 'installed' ]];then
printf 'sudo apt install --yes \033[0;31mpowerline \033[0m\n';exit 1
fi
| ||
PYTHON3_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'python3' 2>&1)"
if [[ ! $? -eq 0 ]]||[[ ! "${PYTHON3_INSTALL_STATUS}" -eq 'installed' ]];then
printf 'sudo apt install --yes \033[0;31mpython3 \033[0m\n';exit 1
fi
PYTHON3_PIP_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'python3-pip' 2>&1)"
if [[ ! $? -eq 0 ]]||[[ ! "${PYTHON3_PIP_INSTALL_STATUS}" -eq 'installed' ]];then
printf 'sudo apt install --yes \033[0;31mpython3-pip \033[0m\n';exit 1
fi
PYTHON3_VENV_INSTALL_STATUS="$(dpkg-query -W --showformat='${db:Status-Status}' 'python3-venv' 2>&1)"
if [[ ! $? -eq 0 ]]||[[ ! "${PYTHON3_VENV_INSTALL_STATUS}" -eq 'installed' ]];then
printf 'sudo apt install --yes \033[0;31mpython3-venv \033[0m\n';exit 1
fi
| ||
python3 -m site --user-site
python3 -m site | grep packages
python3 -m sysconfig | grep packages
|
# windows 11
C:\> py -c "import sysconfig; print(sysconfig.get_path('purelib'))"
python3 -c "import sysconfig; print(sysconfig.get_path('purelib'))"
| |
python3 -m venv ~/.venv/powerline --prompt="Powerline"
# source .venv/bin/activate
# (Powerline) $
| ||
python -m venv ~/.venv/powerline --prompt="Powerline"
# .venv\Scripts\activate
# (Powerline) PS>
| ||
uptime | cut -f 4-5 -d ' ' | cut -f 1 -d ','
| ||
cat ${HOME}/.config/powerline/config.json|jq '.ext.shell.theme'
cat ${HOME}/.config/powerline/themes/shell/default_leftonly.json|\
jq '.segments.left[].function'
| ||
jq '.ext.shell|select(.theme=="default")' ${HOME}/.config/powerline/config.json
jq '.segments.left[]|select(.function=="powerline.segments.common.vcs.branch")'\
${HOME}/.config/powerline/themes/shell/default_leftonly.json
| ||
cat ${HOME}/.config/powerline/config.json |\
jq '.ext.shell|select(.theme=="default")|.theme="default_leftonly"'
cat ${HOME}/.config/powerline/themes/shell/default_leftonly.json |\
jq '.segments.left[]|select(.function=="powerline.segments.common.vcs.branch")|.args={"status_colors":true}'
| ||
jq '(.ext.shell|select(.theme=="default")).theme="default_leftonly"'\
${HOME}/.config/powerline/config.json
jq '(.segments.left[]|select(.function=="powerline.segments.common.vcs.branch")).args={"status_colors":true}'\
${HOME}/.config/powerline/themes/shell/default_leftonly.json
| ||