diff --git a/.gitignore b/.gitignore index 072074f..78d0c68 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -home/user/.subzsh/plugins +home/user/.subzsh/plugins/* +!home/user/.subzsh/plugins/dirhistory.zsh home/user/.config/nvim/plugin diff --git a/home/user/.subzsh/plugin b/home/user/.subzsh/plugin index 8e24950..a6d5fc6 100644 --- a/home/user/.subzsh/plugin +++ b/home/user/.subzsh/plugin @@ -7,4 +7,4 @@ so ~/.subzsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh so ~/.subzsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh so ~/.subzsh/plugins/hlissner/zsh-autopair/autopair.zsh so ~/.subzsh/plugins/unixorn/fzf-zsh-plugin/fzf-zsh-plugin.plugin.zsh - +so ~/.subzsh/plugins/dirhistory.zsh diff --git a/home/user/.subzsh/plugins/dirhistory.zsh b/home/user/.subzsh/plugins/dirhistory.zsh new file mode 100644 index 0000000..7021fc0 --- /dev/null +++ b/home/user/.subzsh/plugins/dirhistory.zsh @@ -0,0 +1,221 @@ +## +# Navigate directory history using ALT-LEFT and ALT-RIGHT. ALT-LEFT moves back to directories +# that the user has changed to in the past, and ALT-RIGHT undoes ALT-LEFT. +# +# Navigate directory hierarchy using ALT-UP and ALT-DOWN. +# ALT-UP moves to higher hierarchy (cd ..) +# ALT-DOWN moves into the first directory found in alphabetical order +# + +dirhistory_past=($PWD) +dirhistory_future=() +export dirhistory_past +export dirhistory_future + +export DIRHISTORY_SIZE=30 + +# Pop the last element of dirhistory_past. +# Pass the name of the variable to return the result in. +# Returns the element if the array was not empty, +# otherwise returns empty string. +function pop_past() { + typeset -g $1="${dirhistory_past[$#dirhistory_past]}" + if [[ $#dirhistory_past -gt 0 ]]; then + dirhistory_past[$#dirhistory_past]=() + fi +} + +function pop_future() { + typeset -g $1="${dirhistory_future[$#dirhistory_future]}" + if [[ $#dirhistory_future -gt 0 ]]; then + dirhistory_future[$#dirhistory_future]=() + fi +} + +# Push a new element onto the end of dirhistory_past. If the size of the array +# is >= DIRHISTORY_SIZE, the array is shifted +function push_past() { + if [[ $#dirhistory_past -ge $DIRHISTORY_SIZE ]]; then + shift dirhistory_past + fi + if [[ $#dirhistory_past -eq 0 || $dirhistory_past[$#dirhistory_past] != "$1" ]]; then + dirhistory_past+=($1) + fi +} + +function push_future() { + if [[ $#dirhistory_future -ge $DIRHISTORY_SIZE ]]; then + shift dirhistory_future + fi + if [[ $#dirhistory_future -eq 0 || $dirhistory_futuret[$#dirhistory_future] != "$1" ]]; then + dirhistory_future+=($1) + fi +} + +# Called by zsh when directory changes +autoload -U add-zsh-hook +add-zsh-hook chpwd chpwd_dirhistory +function chpwd_dirhistory() { + push_past $PWD + # If DIRHISTORY_CD is not set... + if [[ -z "${DIRHISTORY_CD+x}" ]]; then + # ... clear future. + dirhistory_future=() + fi +} + +function dirhistory_cd(){ + DIRHISTORY_CD="1" + cd $1 + unset DIRHISTORY_CD +} + +# Move backward in directory history +function dirhistory_back() { + local cw="" + local d="" + # Last element in dirhistory_past is the cwd. + + pop_past cw + if [[ "" == "$cw" ]]; then + # Someone overwrote our variable. Recover it. + dirhistory_past=($PWD) + return + fi + + pop_past d + if [[ "" != "$d" ]]; then + dirhistory_cd $d + push_future $cw + else + push_past $cw + fi +} + + +# Move forward in directory history +function dirhistory_forward() { + local d="" + + pop_future d + if [[ "" != "$d" ]]; then + dirhistory_cd $d + push_past $d + fi +} + + +# Bind keys to history navigation +function dirhistory_zle_dirhistory_back() { + # Erase current line in buffer + zle .kill-buffer + dirhistory_back + zle .accept-line +} + +function dirhistory_zle_dirhistory_future() { + # Erase current line in buffer + zle .kill-buffer + dirhistory_forward + zle .accept-line +} + +zle -N dirhistory_zle_dirhistory_back +zle -N dirhistory_zle_dirhistory_future + +for keymap in emacs vicmd viins; do + # dirhistory_back + bindkey -M $keymap "\e[3D" dirhistory_zle_dirhistory_back # xterm in normal mode + bindkey -M $keymap "\e[1;3D" dirhistory_zle_dirhistory_back # xterm in normal mode + bindkey -M $keymap "\e\e[D" dirhistory_zle_dirhistory_back # Putty + bindkey -M $keymap "\eO3D" dirhistory_zle_dirhistory_back # GNU screen + + case "$TERM_PROGRAM" in + Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app + iTerm.app) bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back ;; # iTerm2 + esac + + if (( ${+terminfo[kcub1]} )); then + bindkey -M $keymap "^[${terminfo[kcub1]}" dirhistory_zle_dirhistory_back # urxvt + fi + + # dirhistory_future + bindkey -M $keymap "\e[3C" dirhistory_zle_dirhistory_future # xterm in normal mode + bindkey -M $keymap "\e[1;3C" dirhistory_zle_dirhistory_future # xterm in normal mode + bindkey -M $keymap "\e\e[C" dirhistory_zle_dirhistory_future # Putty + bindkey -M $keymap "\eO3C" dirhistory_zle_dirhistory_future # GNU screen + + case "$TERM_PROGRAM" in + Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app + iTerm.app) bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future ;; # iTerm2 + esac + + if (( ${+terminfo[kcuf1]} )); then + bindkey -M $keymap "^[${terminfo[kcuf1]}" dirhistory_zle_dirhistory_future # urxvt + fi +done + +# +# HIERARCHY Implemented in this section, in case someone wants to split it to another plugin if it clashes bindings +# + +# Move up in hierarchy +function dirhistory_up() { + cd .. || return 1 +} + +# Move down in hierarchy +function dirhistory_down() { + cd "$(find . -mindepth 1 -maxdepth 1 -type d | sort -n | head -n 1)" || return 1 +} + + +# Bind keys to hierarchy navigation +function dirhistory_zle_dirhistory_up() { + zle .kill-buffer # Erase current line in buffer + dirhistory_up + zle .accept-line +} + +function dirhistory_zle_dirhistory_down() { + zle .kill-buffer # Erase current line in buffer + dirhistory_down + zle .accept-line +} + +zle -N dirhistory_zle_dirhistory_up +zle -N dirhistory_zle_dirhistory_down + +for keymap in emacs vicmd viins; do + # dirhistory_up + bindkey -M $keymap "\e[3A" dirhistory_zle_dirhistory_up # xterm in normal mode + bindkey -M $keymap "\e[1;3A" dirhistory_zle_dirhistory_up # xterm in normal mode + bindkey -M $keymap "\e\e[A" dirhistory_zle_dirhistory_up # Putty + bindkey -M $keymap "\eO3A" dirhistory_zle_dirhistory_up # GNU screen + + case "$TERM_PROGRAM" in + Apple_Terminal) bindkey -M $keymap "^[[A" dirhistory_zle_dirhistory_up ;; # Terminal.app + iTerm.app) bindkey -M $keymap "^[^[[A" dirhistory_zle_dirhistory_up ;; # iTerm2 + esac + + if (( ${+terminfo[kcuu1]} )); then + bindkey -M $keymap "^[${terminfo[kcuu1]}" dirhistory_zle_dirhistory_up # urxvt + fi + + # dirhistory_down + bindkey -M $keymap "\e[3B" dirhistory_zle_dirhistory_down # xterm in normal mode + bindkey -M $keymap "\e[1;3B" dirhistory_zle_dirhistory_down # xterm in normal mode + bindkey -M $keymap "\e\e[B" dirhistory_zle_dirhistory_down # Putty + bindkey -M $keymap "\eO3B" dirhistory_zle_dirhistory_down # GNU screen + + case "$TERM_PROGRAM" in + Apple_Terminal) bindkey -M $keymap "^[[B" dirhistory_zle_dirhistory_down ;; # Terminal.app + iTerm.app) bindkey -M $keymap "^[^[[B" dirhistory_zle_dirhistory_down ;; # iTerm2 + esac + + if (( ${+terminfo[kcud1]} )); then + bindkey -M $keymap "^[${terminfo[kcud1]}" dirhistory_zle_dirhistory_down # urxvt + fi +done + +unset keymap diff --git a/home/user/.vimrc b/home/user/.vimrc deleted file mode 100644 index 2df909f..0000000 --- a/home/user/.vimrc +++ /dev/null @@ -1,60 +0,0 @@ - -set number "номер строки -set ruler -set laststatus=2 -set encoding=utf-8 "Ставит кодировку UTF-8 -set nocompatible "Отключает обратную совместимость с Vi -syntax on "Включает подсветку синтаксиса - -set expandtab -set smarttab -set tabstop=4 -set softtabstop=4 -set shiftwidth=4 -set autoindent -set smartindent -set nowrap - -set noerrorbells -set novisualbell -set showcmd -set showtabline=2 - -set ignorecase -set smartcase -set hlsearch -set incsearch - -let &t_SI.="\e[5 q" "SI = режим вставки -let &t_SR.="\e[3 q" "SR = режим замены -let &t_EI.="\e[1 q" "EI = нормальный режим - -set mousehide -set mouse=a - -set colorcolumn=120 -set scrolloff=7 - -set virtualedit=onemore " allow for cursor beyond last character - -" f4 toggle hlsearch -nnoremap :set invhlsearch - -" navigation on russian -nmap о j -nmap л k -nmap р h -nmap д l -nmap ш i -nmap ф a -nmap в d - - -set ffs=unix,dos,mac -set encoding=utf8 - -" tabs -nnoremap :tabprevious -nnoremap :tabnext -nnoremap :tabprevious -nnoremap :tabnext