Linux Terminal 설정

1. Zsh

1.1. Zsh 설치

sudo apt install zsh
sudo chsh -s /bin/zsh
sudo chsh -s /bin/zsh 아이디

재부팅


2. Oh-my-zsh

2.1. 설치

curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh


2.2. Theme 설정

~/.zshrc에서 테마를 변경한다.

ZSH_THEME="agnoster"

~/.oh-my-zsh/themes/agnoster.zsh-theme에서 prompt의 사용자 명을 지운다.

prompt_context(){}

~/.oh-my-zsh/themes/agnoster.zsh-theme의 ## Main prompt에 다음을 추가하여 multi-line command를 설정한다.
(prompt_newline는 parser문제로 여기에 붙여넣기 불가.)

# 멀티라인 적용, 커버모양 변경

## Main prompt
build_prompt() {
  RETVAL=$?
  prompt_status
  prompt_virtualenv
  prompt_context
  prompt_dir
  prompt_git
  prompt_bzr
  prompt_hg
  prompt_newline # 멀티라인 적용
  prompt_end
}


2.3. FZF

sudo apt install fd-find
sudo apt install ripgrep
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

.zshrc에 아래 내용을 추가한다.

alias fd=fdfind
export FZF_DEFAULT_COMMAND="fdfind"
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_ALT_C_COMMAND="fdfind -t d . $HOME"

~/.fzf/shell/key-bindings.zsh에서 find를 fd로 변경한다.


2.4. Plugin 설치

# zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting

# zsh-autosuggestions
git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

# zsh-vim
git clone https://github.com/softmoth/zsh-vim-mode.git $ZSH_CUSTOM/plugins/zsh-vim-mode

# autojump
sudo apt install autojump
plugins=(
  git
  zsh-syntax-highlighting
  zsh-autosuggestions
  zsh-vim-mode
  autojump
)


3. Tmux

3.1. 설치

sudo apt install tmux


3.2. vim 모드 설정

~/.tmux.conf에 저장한다. (ref)


3.3. zsh 실행 시 tmux 자동 연결

~/.zshrc plugins 밑에 다음을 추가한다.

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi


4. 폴더 변경 시 venv 자동 activate

cd 명령 시 폴더 내에 venv 폴더가 있을 경우 Conda env와 다른 venv를 deactivate하고 현재 폴더의 venv를 활성화 한다.(ref)

# >>> CD for virtual environment >>>
vcd() {
    folder_input=$1

    if [[ $folder_input != "" ]]; then
        case $folder_input in
            ".." ) cd .. && return;;
            "-" )  cd -  && return;;
            "/" )  cd /  && return;;
            * )    cd "$folder_input" || return;;
        esac

        # activate venv
        path_activate="$(pwd)/venv/bin/activate"
        if [[ -f $path_activate ]]; then
            # deactivate any existing virtual env
            [[ $VIRTUAL_ENV ]] && deactivate

            # deactivate any existing conda env
            [[ $CONDA_PROMPT_MODIFIER ]] && conda deactivate

            source $path_activate;
        fi
        # activate venv end
    fi
}

alias cd=vcd
# <<< CD for virtual environment <<<

# >>> command for activate conda >>>
aconda(){
    [[ $VIRTUAL_ENV ]] && deactivate
    source ~/anaconda3/bin/activate
}
# <<< command for activate conda <<<