diff options
| -rw-r--r-- | alias | 501 | ||||
| -rw-r--r-- | profile | 1 | ||||
| -rw-r--r-- | vim/init/config.vim | 244 |
3 files changed, 362 insertions, 384 deletions
| @@ -1,142 +1,42 @@ | |||
| 1 | # My alias for bash and zsh | 1 | # My alias for bash and zsh |
| 2 | 2 | ||
| 3 | # __CONFIG__ | ||
| 4 | # __NETWORK__ | ||
| 5 | # __VIM__ | ||
| 6 | # __SSH__ | ||
| 7 | # __IMAP__ | ||
| 8 | # __GIST__ | ||
| 9 | # __UNIX__ | ||
| 10 | # __PACMAN__ | ||
| 11 | # __CD__ | ||
| 12 | # __BLOG__ | ||
| 13 | # __GIT__ | ||
| 14 | # __GITHUB__ | ||
| 15 | # __TIG__ | ||
| 16 | |||
| 17 | # __CONFIG__ | ||
| 18 | alias al="$EDITOR $SETTING_DIR/alias && source $SETTING_DIR/alias" | 3 | alias al="$EDITOR $SETTING_DIR/alias && source $SETTING_DIR/alias" |
| 4 | |||
| 5 | # SHELL {{{ | ||
| 19 | eval "${shell}rc(){ | 6 | eval "${shell}rc(){ |
| 20 | local RCFILE=$XDG_CONFIG_HOME/${shell}/.${shell}rc | 7 | local RCFILE=$XDG_CONFIG_HOME/${shell}/.${shell}rc |
| 21 | vim \$RCFILE && source \$RCFILE | 8 | vim \$RCFILE && source \$RCFILE |
| 22 | }" | 9 | }" |
| 23 | alias vimrc='vim ~/.vimrc' | ||
| 24 | alias tigrc="$EDITOR ~/.tigrc" | ||
| 25 | alias mutt.rc="$EDITOR ~/.config/mutt/muttrc" | ||
| 26 | alias ala.rc="$EDITOR ~/.config/alacritty/alacritty.toml" | ||
| 27 | alias alacritty.rc="$EDITOR ~/.config/alacritty/alacritty.toml" | ||
| 28 | alias git.config="$EDITOR ~/.gitconfig" | ||
| 29 | alias gpg.config="$EDITOR ~/.gnupg/gpg-agent.conf" | ||
| 30 | alias ssh.config="$EDITOR ~/.ssh/config" | ||
| 31 | alias ssh.auth="$EDITOR ~/.ssh/authorized_keys" | ||
| 32 | alias ssh.known="$EDITOR ~/.ssh/known_hosts" | ||
| 33 | config(){ cd ~/.config/$1; } | ||
| 34 | alias tmux.config="$EDITOR ~/.tmux.conf" | ||
| 35 | cde() { cd /etc/$@; } | ||
| 36 | |||
| 37 | alias cdetc='cde' | ||
| 38 | alias ls='ls --color' | ||
| 39 | alias lsd='ls -d */' | ||
| 40 | alias grep='grep --color' | ||
| 41 | alias eof='IGNOREEOF=10' | 10 | alias eof='IGNOREEOF=10' |
| 42 | 11 | ||
| 43 | # __NETWORK__ | 12 | # }}} |
| 44 | alias dig.detail='dig +noall +answer +multiline' | 13 | # CUSTOM HELPER {{{ |
| 45 | 14 | cdh() { cd $SETTING_DIR/$@; } | |
| 46 | # __VIM__ | 15 | alias chh="tig -C $SETTING_DIR status" |
| 47 | if which nvim &>/dev/null; then | 16 | # }}} |
| 48 | alias vim='nvim' | 17 | # Text Encode/Decode{{{ |
| 49 | alias v='nvim' | 18 | big52utf8() { |
| 50 | alias vv='/usr/bin/vim' | 19 | iconv -f BIG-5 -t UTF-8 |
| 51 | else | ||
| 52 | alias v='vim' | ||
| 53 | fi | ||
| 54 | alias vu='vim -u NONE' | ||
| 55 | alias vr='vim -R' | ||
| 56 | # Edit last file | ||
| 57 | alias vl="vim -c 'norm '" | ||
| 58 | # Use Telescope to select recent files | ||
| 59 | vll() { vim -c 'Telescope oldfiles'; } | ||
| 60 | # Apply defaut session | ||
| 61 | alias vS="vim -S /tmp/vim.session" | ||
| 62 | alias cdv='cd ~/.config/nvim' | ||
| 63 | vs() { which $1 && vim $(which $1); } | ||
| 64 | [ "$shell" = zsh ] && compdef vs=which | ||
| 65 | alias vim.dos2unix="vim '+set ff=unix' '+x'" | ||
| 66 | |||
| 67 | # __SSH__ | ||
| 68 | alias cdssh='cd ~/.ssh' | ||
| 69 | alias ptt='ssh ptt' | ||
| 70 | alias sshv='ssh -t vps' | ||
| 71 | ssh.tar() { | ||
| 72 | prompt-vim "tar cf - foo | ssh vps 'cd ~/Downloads; tar xf -' \nssh vps 'tar czf - --directory=/working/path target' | tar xvzf -" | ||
| 73 | } | ||
| 74 | ssh.up() { | ||
| 75 | set -o pipefail | ||
| 76 | filename=${3:-`basename $1`} | ||
| 77 | # Upload to absolution path | ||
| 78 | if [[ $2 =~ '^/' ]]; then | ||
| 79 | folder=${2%/} | ||
| 80 | cat $1 | ssh vps "mkdir -p $folder; cat >${folder}/${filename}" || return 1 | ||
| 81 | echo Uploaded to ${folder}/${filename} | ||
| 82 | # Upload to relative in ~/public/ | ||
| 83 | else | ||
| 84 | folder='~/public/'${2%/} | ||
| 85 | cat $1 | ssh vps "mkdir -p $folder; cat >${folder}/${filename}" || return 1 | ||
| 86 | echo https://topo.tw/p/${2%/}/${filename} | ||
| 87 | fi | ||
| 88 | } | ||
| 89 | ssh.up.today() { | ||
| 90 | DATE=$(date --iso-8601) | ||
| 91 | ssh vps mkdir -p ~/public/$DATE | ||
| 92 | ssh.up $1 $DATE | ||
| 93 | } | ||
| 94 | ssh.down() { | ||
| 95 | ssh -t vps rm -rf -i ~/public/"$1" | ||
| 96 | } | ||
| 97 | |||
| 98 | # __IMAP__ | ||
| 99 | imap.save() { | ||
| 100 | curl "imaps://mail.topo.tw/$1" \ | ||
| 101 | --user pham:`pass mail/pham@mail.topo.tw` \ | ||
| 102 | -T $2 | ||
| 103 | } | ||
| 104 | imap.save_attachment() { | ||
| 105 | #TEMPFILE=$(mktemp) | ||
| 106 | trap 'rm $TEMPFILE' EXIT | ||
| 107 | mail -a $1 -Sexpandaddr /dev/stdout | \ | ||
| 108 | curl imaps://mail.topo.tw/INBOX \ | ||
| 109 | --user pham:`pass mail/pham@mail.topo.tw` \ | ||
| 110 | -T /dev/stdin | ||
| 111 | } | 20 | } |
| 112 | imap.search.subject() { | 21 | utf82big5() { |
| 113 | curl "imaps://mail.topo.tw/$1" \ | 22 | iconv -t BIG-5 -f UTF-8 |
| 114 | --user pham:`pass mail/pham@mail.topo.tw` \ | ||
| 115 | --request "SEARCH SUBJECT $2" | ||
| 116 | } | 23 | } |
| 117 | imap.fetch() { | 24 | urlencode() { |
| 118 | curl "imaps://mail.topo.tw/$1;MAILINDEX=$2" \ | 25 | perl -lpe 's/([^A-Za-z0-9.\/:])/sprintf("%%%02X", ord($1))/seg' |
| 119 | --user pham:`pass mail/pham@mail.topo.tw` | \ | 26 | # Alternative: |
| 120 | dos2unix | \ | 27 | # curl -Gso /dev/null -w %{url_effective} --data-urlencode @- "" |
| 121 | sed -E '0,/^ *$/d' | ||
| 122 | } | 28 | } |
| 123 | 29 | # }}} | |
| 124 | # __GIST__ | 30 | # UNIX {{{ |
| 125 | alias g='gist' | ||
| 126 | alias gl='gist last' | ||
| 127 | unalias gg &>/dev/null | ||
| 128 | alias gg='gist grep' | ||
| 129 | |||
| 130 | # __UNIX__ | ||
| 131 | alias chx='chmod +x' | 31 | alias chx='chmod +x' |
| 132 | alias chr='chmod +r' | 32 | alias chr='chmod +r' |
| 33 | config(){ cd ~/.config/$1; } | ||
| 133 | alias k='kill %1' | 34 | alias k='kill %1' |
| 134 | alias s='sudo systemctl' | 35 | alias s='sudo systemctl' |
| 135 | alias j='sudo journalctl -xeu' | 36 | alias j='sudo journalctl -xeu' |
| 136 | alias m='mutt' | 37 | alias ls='ls --color' |
| 137 | alias h='himalaya' | 38 | alias lsd='ls -d */' |
| 138 | alias gmail="mutt -F $SETTING_DIR/mutt/muttrc.gmail" | 39 | alias grep='grep --color' |
| 139 | alias ntu="mutt -F $SETTING_DIR/mutt/muttrc.b97602041" | ||
| 140 | path() { echo $PATH; } # Should not use alias, because $PATH is not initialized | 40 | path() { echo $PATH; } # Should not use alias, because $PATH is not initialized |
| 141 | ps1.swap() { | 41 | ps1.swap() { |
| 142 | if [ -z "$PS1_bak" ]; then PS1_bak="$PS1" | 42 | if [ -z "$PS1_bak" ]; then PS1_bak="$PS1" |
| @@ -211,8 +111,105 @@ gr() { | |||
| 211 | grep -IR $@ . | sed '/^.\{2048\}./d' | 111 | grep -IR $@ . | sed '/^.\{2048\}./d' |
| 212 | } | 112 | } |
| 213 | alias findn='find . -iname' | 113 | alias findn='find . -iname' |
| 114 | alias ce='crontab -e' | ||
| 115 | alias cl='crontab -l' | ||
| 116 | alias df='df -h' | ||
| 214 | 117 | ||
| 215 | # __PACMAN__ | 118 | # }}} |
| 119 | # Clipboard{{{ | ||
| 120 | alias xi='xsel -ib' | ||
| 121 | alias xii='`fc -ln -1` | head -1 | xsel -ib' | ||
| 122 | alias xo='xsel -ob' | ||
| 123 | alias xl='history | tail -1 | grep -oP "^\s*[0-9]+\s\s\K.*" | xsel -ib && echo Copied to clipboard && xsel -ob' | ||
| 124 | # }}} | ||
| 125 | # TMUX {{{ | ||
| 126 | alias tma='tmux a' | ||
| 127 | alias tmux.config="$EDITOR ~/.tmux.conf" | ||
| 128 | # }}} | ||
| 129 | # NETWORK {{{ | ||
| 130 | |||
| 131 | alias dig.detail='dig +noall +answer +multiline' | ||
| 132 | alias co='curl -O' | ||
| 133 | alias curl.code='curl -o /dev/null --silent -Iw "%{http_code}"' | ||
| 134 | alias p8='ping -c 3 8.8.8.8' | ||
| 135 | alias curl.google='curl -v google.com' | ||
| 136 | alias curl.wifi='curl -I google.com | grep -E "^Location:" | cut -d" " -f2 | xsel -ib' | ||
| 137 | ip.neigh() { | ||
| 138 | INTERFACES=$(ifconfig | sed -nE 's/^([^ :]+).*$/\1/p') | ||
| 139 | test -z "$1" && echo $INTERFACES && return 0 | ||
| 140 | |||
| 141 | ifconfig | sed -nE "/^${1}/,/^$/ s/^ +inet ([0-9.]+) .*$/\1/p" | ||
| 142 | } | ||
| 143 | |||
| 144 | # }}} | ||
| 145 | # MAIL {{{ | ||
| 146 | alias m='mutt' | ||
| 147 | alias mutt.rc="$EDITOR ~/.config/mutt/muttrc" | ||
| 148 | alias h='himalaya' | ||
| 149 | alias gmail="mutt -F $SETTING_DIR/mutt/muttrc.gmail" | ||
| 150 | alias ntu="mutt -F $SETTING_DIR/mutt/muttrc.b97602041" | ||
| 151 | imap.save() { | ||
| 152 | curl "imaps://mail.topo.tw/$1" \ | ||
| 153 | --user pham:`pass mail/pham@mail.topo.tw` \ | ||
| 154 | -T $2 | ||
| 155 | } | ||
| 156 | imap.save_attachment() { | ||
| 157 | #TEMPFILE=$(mktemp) | ||
| 158 | trap 'rm $TEMPFILE' EXIT | ||
| 159 | mail -a $1 -Sexpandaddr /dev/stdout | \ | ||
| 160 | curl imaps://mail.topo.tw/INBOX \ | ||
| 161 | --user pham:`pass mail/pham@mail.topo.tw` \ | ||
| 162 | -T /dev/stdin | ||
| 163 | } | ||
| 164 | imap.search.subject() { | ||
| 165 | curl "imaps://mail.topo.tw/$1" \ | ||
| 166 | --user pham:`pass mail/pham@mail.topo.tw` \ | ||
| 167 | --request "SEARCH SUBJECT $2" | ||
| 168 | } | ||
| 169 | imap.fetch() { | ||
| 170 | curl "imaps://mail.topo.tw/$1;MAILINDEX=$2" \ | ||
| 171 | --user pham:`pass mail/pham@mail.topo.tw` | \ | ||
| 172 | dos2unix | \ | ||
| 173 | sed -E '0,/^ *$/d' | ||
| 174 | } | ||
| 175 | |||
| 176 | # }}} | ||
| 177 | # SSH {{{ | ||
| 178 | alias ssh.config="$EDITOR ~/.ssh/config" | ||
| 179 | alias ssh.auth="$EDITOR ~/.ssh/authorized_keys" | ||
| 180 | alias ssh.known="$EDITOR ~/.ssh/known_hosts" | ||
| 181 | alias cdssh='cd ~/.ssh' | ||
| 182 | alias ptt='ssh ptt' | ||
| 183 | alias sshv='ssh -t vps' | ||
| 184 | ssh.tar() { | ||
| 185 | prompt-vim "tar cf - foo | ssh vps 'cd ~/Downloads; tar xf -' \nssh vps 'tar czf - --directory=/working/path target' | tar xvzf -" | ||
| 186 | } | ||
| 187 | ssh.up() { | ||
| 188 | set -o pipefail | ||
| 189 | filename=${3:-`basename $1`} | ||
| 190 | # Upload to absolution path | ||
| 191 | if [[ $2 =~ '^/' ]]; then | ||
| 192 | folder=${2%/} | ||
| 193 | cat $1 | ssh vps "mkdir -p $folder; cat >${folder}/${filename}" || return 1 | ||
| 194 | echo Uploaded to ${folder}/${filename} | ||
| 195 | # Upload to relative in ~/public/ | ||
| 196 | else | ||
| 197 | folder='~/public/'${2%/} | ||
| 198 | cat $1 | ssh vps "mkdir -p $folder; cat >${folder}/${filename}" || return 1 | ||
| 199 | echo https://topo.tw/p/${2%/}/${filename} | ||
| 200 | fi | ||
| 201 | } | ||
| 202 | ssh.up.today() { | ||
| 203 | DATE=$(date --iso-8601) | ||
| 204 | ssh vps mkdir -p ~/public/$DATE | ||
| 205 | ssh.up $1 $DATE | ||
| 206 | } | ||
| 207 | ssh.down() { | ||
| 208 | ssh -t vps rm -rf -i ~/public/"$1" | ||
| 209 | } | ||
| 210 | |||
| 211 | # }}} | ||
| 212 | # PACMAN {{{ | ||
| 216 | alias pac='sudo pacman -S' # pacman install | 213 | alias pac='sudo pacman -S' # pacman install |
| 217 | alias psy='sudo pacman -Syy' | 214 | alias psy='sudo pacman -Syy' |
| 218 | alias ys='yay -S' | 215 | alias ys='yay -S' |
| @@ -238,15 +235,50 @@ psi() { | |||
| 238 | } | 235 | } |
| 239 | pkgbuild() { git clone https://aur.archlinux.org/$1.git; } | 236 | pkgbuild() { git clone https://aur.archlinux.org/$1.git; } |
| 240 | 237 | ||
| 241 | # __CD__ | 238 | # }}} |
| 239 | # Alacritty{{{ | ||
| 240 | alias ala.rc="$EDITOR ~/.config/alacritty/alacritty.toml" | ||
| 241 | alias alacritty.rc="$EDITOR ~/.config/alacritty/alacritty.toml" | ||
| 242 | # }}} | ||
| 243 | # VIM {{{ | ||
| 244 | alias vimrc='vim ~/.vimrc' | ||
| 245 | if which nvim &>/dev/null; then | ||
| 246 | alias vim='nvim' | ||
| 247 | alias v='nvim' | ||
| 248 | alias vv='/usr/bin/vim' | ||
| 249 | else | ||
| 250 | alias v='vim' | ||
| 251 | fi | ||
| 252 | alias vu='vim -u NONE' | ||
| 253 | alias vr='vim -R' | ||
| 254 | # Edit last file | ||
| 255 | alias vl="vim -c 'norm '" | ||
| 256 | # Use Telescope to select recent files | ||
| 257 | vll() { vim -c 'Telescope oldfiles'; } | ||
| 258 | # Apply defaut session | ||
| 259 | alias vS="vim -S /tmp/vim.session" | ||
| 260 | alias cdv='cd ~/.config/nvim' | ||
| 261 | vs() { which $1 && vim $(which $1); } | ||
| 262 | [ "$shell" = zsh ] && compdef vs=which | ||
| 263 | alias vim.dos2unix="vim '+set ff=unix' '+x'" | ||
| 264 | vvv() { | ||
| 265 | while true; do | ||
| 266 | vim -c 'norm ' | ||
| 267 | if [ $? -ne 0 ]; then | ||
| 268 | break | ||
| 269 | fi | ||
| 270 | echo "restarting vim..."; | ||
| 271 | done | ||
| 272 | } | ||
| 273 | |||
| 274 | # }}} | ||
| 275 | # CD {{{ | ||
| 242 | alias ..='cd ..' | 276 | alias ..='cd ..' |
| 243 | alias ...='cd ../..' | 277 | alias ...='cd ../..' |
| 244 | alias ld='cd -' # last directory | 278 | alias ld='cd -' # last directory |
| 245 | cdg() { | ||
| 246 | target=$(sed 's# #/#g' <<<"$@") | ||
| 247 | cd ~/git/$target || cd ~/git | ||
| 248 | } | ||
| 249 | alias cda='mkdir -p ~/data && cd ~/data' | 279 | alias cda='mkdir -p ~/data && cd ~/data' |
| 280 | cde() { cd /etc/$@; } | ||
| 281 | alias cdetc='cde' | ||
| 250 | alias cdd='cd ~/Downloads' | 282 | alias cdd='cd ~/Downloads' |
| 251 | alias cdD='cd ~/Documents' | 283 | alias cdD='cd ~/Documents' |
| 252 | alias cdP='cd ~/Pictures' | 284 | alias cdP='cd ~/Pictures' |
| @@ -254,7 +286,8 @@ alias cdpu='cd ~/public' | |||
| 254 | alias cdV='cd ~/Videos' | 286 | alias cdV='cd ~/Videos' |
| 255 | alias cdM='cd ~/Music' | 287 | alias cdM='cd ~/Music' |
| 256 | 288 | ||
| 257 | # __BLOG__ | 289 | # }}} |
| 290 | # BLOG {{{ | ||
| 258 | alias cdb='cd ~/blog' | 291 | alias cdb='cd ~/blog' |
| 259 | vp() { | 292 | vp() { |
| 260 | [[ $HOST = vultr ]] || PREFIX='ssh -qt vps' | 293 | [[ $HOST = vultr ]] || PREFIX='ssh -qt vps' |
| @@ -282,19 +315,48 @@ vp() { | |||
| 282 | fi | 315 | fi |
| 283 | } | 316 | } |
| 284 | 317 | ||
| 285 | # __GIT__ | 318 | # }}} |
| 319 | # GIT {{{ | ||
| 320 | alias git.config="$EDITOR ~/.gitconfig" | ||
| 286 | unalias gc &> /dev/null # override zsh plugin alias | 321 | unalias gc &> /dev/null # override zsh plugin alias |
| 287 | gc() { git clone $@; if [ $# = 1 ]; then cd $(basename ${1%.git}); fi } | 322 | gc() { git clone $@; if [ $# = 1 ]; then cd $(basename ${1%.git}); fi } |
| 288 | gc1() { git clone --depth=1 $1 && cd $(basename $1); } | 323 | gc1() { git clone --depth=1 $1 && cd $(basename $1); } |
| 289 | gcv() { gc vps:$1; } | ||
| 290 | alias gls='git log -S' | 324 | alias gls='git log -S' |
| 325 | cdg() { | ||
| 326 | target=$(sed 's# #/#g' <<<"$@") | ||
| 327 | cd ~/git/$target || cd ~/git | ||
| 328 | } | ||
| 291 | alias cdgg='cd $(git rev-parse --show-toplevel)' | 329 | alias cdgg='cd $(git rev-parse --show-toplevel)' |
| 292 | alias cdgw='cdgg && cd .github/workflows' | 330 | alias cdgw='cdgg && cd .github/workflows' |
| 293 | alias cdgs='cd $(git submodule status | sed "s/^.//" | cut -d" " -f2)' # cd to first submodule | 331 | alias cdgs='cd $(git submodule status | sed "s/^.//" | cut -d" " -f2)' # cd to first submodule |
| 294 | alias ch="/home/pham/helper/bin/git/check-repos.sh" | 332 | alias ch="/home/pham/helper/bin/git/check-repos.sh" |
| 295 | alias git.check="/home/pham/helper/bin/git/check-repos.sh" | 333 | alias git.check="/home/pham/helper/bin/git/check-repos.sh" |
| 296 | 334 | ||
| 297 | # __GITHUB__ | 335 | # }}} |
| 336 | # TIG {{{ | ||
| 337 | alias cdt='cd ~/git/tig' | ||
| 338 | alias t='tig' | ||
| 339 | alias ts='tig status' | ||
| 340 | alias tigrc="$EDITOR ~/.tigrc" | ||
| 341 | alias ta='tig --all' | ||
| 342 | upload_tig() { | ||
| 343 | github-release.sh \ | ||
| 344 | github_api_token=$GITHUB_API_TOKEN \ | ||
| 345 | repo=typebrook/tig \ | ||
| 346 | tag=LATEST \ | ||
| 347 | type=asset \ | ||
| 348 | filename=$(which tig) | ||
| 349 | action=overwrite | ||
| 350 | } | ||
| 351 | # }}} | ||
| 352 | # GIST {{{ | ||
| 353 | alias g='gist' | ||
| 354 | alias gl='gist last' | ||
| 355 | unalias gg &>/dev/null | ||
| 356 | alias gg='gist grep' | ||
| 357 | |||
| 358 | # }}} | ||
| 359 | # Service: GITHUB {{{ | ||
| 298 | export GITHUB_API='https://api.github.com' | 360 | export GITHUB_API='https://api.github.com' |
| 299 | export GITHUB_API_TOKEN="~/.ssh/tokens/github 2>/dev/null)" | 361 | export GITHUB_API_TOKEN="~/.ssh/tokens/github 2>/dev/null)" |
| 300 | alias hub="GITHUB_TOKEN=$GITHUB_API_TOKEN hub" | 362 | alias hub="GITHUB_TOKEN=$GITHUB_API_TOKEN hub" |
| @@ -319,49 +381,12 @@ github.raw() { | |||
| 319 | curl -O https://raw.githubusercontent.com/$1/$2/$3 | 381 | curl -O https://raw.githubusercontent.com/$1/$2/$3 |
| 320 | } | 382 | } |
| 321 | 383 | ||
| 322 | # __TIG__ | 384 | # }}} |
| 323 | alias cdt='cd ~/git/tig' | 385 | # Beancount{{{ |
| 324 | alias t='tig' | ||
| 325 | alias ts='tig status' | ||
| 326 | alias ta='tig --all' | ||
| 327 | upload_tig() { | ||
| 328 | github-release.sh \ | ||
| 329 | github_api_token=$GITHUB_API_TOKEN \ | ||
| 330 | repo=typebrook/tig \ | ||
| 331 | tag=LATEST \ | ||
| 332 | type=asset \ | ||
| 333 | filename=$(which tig) | ||
| 334 | action=overwrite | ||
| 335 | } | ||
| 336 | |||
| 337 | # about custom settings | ||
| 338 | cdh() { cd $SETTING_DIR/$@; } | ||
| 339 | alias chh="tig -C $SETTING_DIR status" | ||
| 340 | |||
| 341 | # about beancount | ||
| 342 | alias cdB='cd $HOME/bean' | 386 | alias cdB='cd $HOME/bean' |
| 343 | alias b='vim $HOME/bean/main.bean' | 387 | alias b='vim $HOME/bean/main.bean' |
| 344 | 388 | # }}} | |
| 345 | # crontab | 389 | # Docker{{{ |
| 346 | alias ce='crontab -e' | ||
| 347 | alias cl='crontab -l' | ||
| 348 | |||
| 349 | # lf | ||
| 350 | alias r='_lf_cd' | ||
| 351 | alias l='_lf_cd' | ||
| 352 | _lf_cd() { | ||
| 353 | tempfile=$(mktemp -t tmp.XXXXXX) | ||
| 354 | lf --last-dir-path $tempfile | ||
| 355 | |||
| 356 | test -f "$tempfile" && \ | ||
| 357 | cd -- "$(cat "$tempfile")" && \ | ||
| 358 | rm -f -- "$tempfile" | ||
| 359 | } | ||
| 360 | |||
| 361 | # disk | ||
| 362 | alias df='df -h' | ||
| 363 | |||
| 364 | # docker | ||
| 365 | alias dk='docker' | 390 | alias dk='docker' |
| 366 | alias dc='docker-compose' | 391 | alias dc='docker-compose' |
| 367 | alias dis='docker images' | 392 | alias dis='docker images' |
| @@ -370,8 +395,8 @@ alias dpsa='docker ps -a' | |||
| 370 | docker.sh() { docker run --rm -it --entrypoint /bin/sh $@; } | 395 | docker.sh() { docker run --rm -it --entrypoint /bin/sh $@; } |
| 371 | docker.bash() { docker run --rm -it --entrypoint /bin/bash $@; } | 396 | docker.bash() { docker run --rm -it --entrypoint /bin/bash $@; } |
| 372 | docker.tags() { curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | tee /dev/tty | jq '.results[]["name"]' | sort; } | 397 | docker.tags() { curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | tee /dev/tty | jq '.results[]["name"]' | sort; } |
| 373 | 398 | # }}} | |
| 374 | # Android | 399 | # Android{{{ |
| 375 | alias debug='./gradlew app:installDebug && adb shell am start -n com.geothings.geobingan/.MainActivity_' | 400 | alias debug='./gradlew app:installDebug && adb shell am start -n com.geothings.geobingan/.MainActivity_' |
| 376 | alias adb.view='adb shell am start -a android.intent.action.VIEW -d' | 401 | alias adb.view='adb shell am start -a android.intent.action.VIEW -d' |
| 377 | alias adb.default='adb shell dumpsys package domain-preferred-apps' | 402 | alias adb.default='adb shell dumpsys package domain-preferred-apps' |
| @@ -384,19 +409,11 @@ alias adb.input='adb shell input text' | |||
| 384 | adb.push() { | 409 | adb.push() { |
| 385 | adb push $1 /sdcard/Download | 410 | adb push $1 /sdcard/Download |
| 386 | } | 411 | } |
| 387 | 412 | # }}} | |
| 388 | # curl | 413 | # python{{{ |
| 389 | alias co='curl -O' | ||
| 390 | alias curl.code='curl -o /dev/null --silent -Iw "%{http_code}"' | ||
| 391 | |||
| 392 | # python | ||
| 393 | alias pip3='python3 -m pip' | 414 | alias pip3='python3 -m pip' |
| 394 | 415 | # }}} | |
| 395 | # gdal | 416 | # sample file{{{ |
| 396 | alias oo='ogr2ogr' | ||
| 397 | alias oi='ogrinfo -al -so' | ||
| 398 | |||
| 399 | # sample file | ||
| 400 | alias sample.text='curl http://metaphorpsum.com/paragraphs/3/5' | 417 | alias sample.text='curl http://metaphorpsum.com/paragraphs/3/5' |
| 401 | alias sample.gpx='curl -O https://docs.mapbox.com/help/data/run.gpx' | 418 | alias sample.gpx='curl -O https://docs.mapbox.com/help/data/run.gpx' |
| 402 | alias sample.geojson='curl -O https://docs.mapbox.com/help/data/stations.geojson' | 419 | alias sample.geojson='curl -O https://docs.mapbox.com/help/data/stations.geojson' |
| @@ -428,8 +445,8 @@ taiwan_dem() { | |||
| 428 | xargs curl -Lo taiwan_dem.zip | 445 | xargs curl -Lo taiwan_dem.zip |
| 429 | unzip -p taiwan_dem.zip dem_20m.tif >20m.tif | 446 | unzip -p taiwan_dem.zip dem_20m.tif >20m.tif |
| 430 | } | 447 | } |
| 431 | 448 | # }}} | |
| 432 | # data file | 449 | # DATA (from internet){{{ |
| 433 | alias taiwan='curl -O http://download.geofabrik.de/asia/taiwan-latest.osm.pbf' | 450 | alias taiwan='curl -O http://download.geofabrik.de/asia/taiwan-latest.osm.pbf' |
| 434 | alias data.rudymap='curl -O https://raw.githubusercontent.com/alpha-rudy/taiwan-topo/master/styles/mapsforge_style/MOI_OSM.xml' | 451 | alias data.rudymap='curl -O https://raw.githubusercontent.com/alpha-rudy/taiwan-topo/master/styles/mapsforge_style/MOI_OSM.xml' |
| 435 | alias data.rudymap_ele='curl -O http://moi.kcwu.csie.org/osm_elevations/ele_taiwan_10_50_100_500_marker-2019.7.o5m' | 452 | alias data.rudymap_ele='curl -O http://moi.kcwu.csie.org/osm_elevations/ele_taiwan_10_50_100_500_marker-2019.7.o5m' |
| @@ -450,32 +467,36 @@ alias data.taiwan_town='curl -o town.zip -L https://data.moi.gov.tw/MoiOD/Syste | |||
| 450 | alias data.taiwan_village='curl -o village.zip -L http://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx\?DATA\=B8AF344F-B5C6-4642-AF46-1832054399CE' | 467 | alias data.taiwan_village='curl -o village.zip -L http://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx\?DATA\=B8AF344F-B5C6-4642-AF46-1832054399CE' |
| 451 | alias data.taiwan_poly='curl -O http://download.geofabrik.de/asia/taiwan.poly' | 468 | alias data.taiwan_poly='curl -O http://download.geofabrik.de/asia/taiwan.poly' |
| 452 | alias data.taiwan_county_code='curl --silent https://www.ris.gov.tw/documents/data/5/1/RSCD0101.txt | iconv -f BIG-5 -t UTF-8 -' | 469 | alias data.taiwan_county_code='curl --silent https://www.ris.gov.tw/documents/data/5/1/RSCD0101.txt | iconv -f BIG-5 -t UTF-8 -' |
| 470 | # }}} | ||
| 471 | # PASS {{{ | ||
| 453 | 472 | ||
| 454 | # clipboard | 473 | alias chp='tig -C ~/.password-store' |
| 455 | alias xi='xsel -ib' | 474 | alias chpass='tig -C ~/.password-store' |
| 456 | alias xii='`fc -ln -1` | head -1 | xsel -ib' | 475 | alias cdpass='cd ~/.password-store' |
| 457 | alias xo='xsel -ob' | 476 | alias p='pass' |
| 458 | alias xl='history | tail -1 | grep -oP "^\s*[0-9]+\s\s\K.*" | xsel -ib && echo Copied to clipboard && xsel -ob' | 477 | alias pc='pass -c' |
| 459 | 478 | alias pe='pass edit' | |
| 460 | # Text Encode/Decode | 479 | alias pgn='pass generate --in-place --clip' |
| 461 | big52utf8() { | 480 | alias pgc='pass generate --clip' |
| 462 | iconv -f BIG-5 -t UTF-8 | 481 | words() { |
| 463 | } | 482 | cat /usr/share/dict/usa | grep -E "^[a-z]{4,8}$" | shuf | head -40 | xargs -n${1:-2} |
| 464 | utf82big5() { | ||
| 465 | iconv -t BIG-5 -f UTF-8 | ||
| 466 | } | ||
| 467 | urlencode() { | ||
| 468 | perl -lpe 's/([^A-Za-z0-9.\/:])/sprintf("%%%02X", ord($1))/seg' | ||
| 469 | # Alternative: | ||
| 470 | # curl -Gso /dev/null -w %{url_effective} --data-urlencode @- "" | ||
| 471 | } | 483 | } |
| 472 | 484 | ||
| 473 | # Network | 485 | # }}} |
| 474 | alias p8='ping -c 3 8.8.8.8' | 486 | # Nginx{{{ |
| 475 | alias curl.google='curl -v google.com' | 487 | alias vgx='sudo vim /etc/nginx/sites-enabled/vps && sudo nginx -t && sudo systemctl reload nginx' |
| 476 | alias curl.wifi='curl -I google.com | grep -E "^Location:" | cut -d" " -f2 | xsel -ib' | 488 | alias cdngx='cd /etc/nginx' |
| 477 | 489 | # }}} | |
| 478 | # misc | 490 | # GIS {{{ |
| 491 | alias oo='ogr2ogr' | ||
| 492 | alias oi='ogrinfo -al -so' | ||
| 493 | TAIWAN_BBOX='118.1036,20.72799,122.9312,26.60305' | ||
| 494 | TAIWAN_BBOX_V='20.72799,118.1036,26.60305,122.9312' | ||
| 495 | TAIPEI_BBOX='121.346,24.926,121.676,25.209' | ||
| 496 | TAIPEI_BBOX_V='24.926,121.346,25.209,121.676' | ||
| 497 | # }}} | ||
| 498 | # Misc{{{ | ||
| 499 | alias gpg.config="$EDITOR ~/.gnupg/gpg-agent.conf" | ||
| 479 | alias foo='echo bar > foo && echo File foo is created && ls -lh foo' | 500 | alias foo='echo bar > foo && echo File foo is created && ls -lh foo' |
| 480 | alias bar='echo foo > bar && echo File bar is created && ls -lh bar' | 501 | alias bar='echo foo > bar && echo File bar is created && ls -lh bar' |
| 481 | alias wcl='wc -l' | 502 | alias wcl='wc -l' |
| @@ -488,7 +509,6 @@ yt.audio() { | |||
| 488 | alias editor='select-editor' | 509 | alias editor='select-editor' |
| 489 | alias hp='http-prompt' | 510 | alias hp='http-prompt' |
| 490 | alias clocg='cloc --vcs=git' | 511 | alias clocg='cloc --vcs=git' |
| 491 | alias tma='tmux a' | ||
| 492 | pbf() { | 512 | pbf() { |
| 493 | protoc --decode_raw | 513 | protoc --decode_raw |
| 494 | } | 514 | } |
| @@ -508,25 +528,8 @@ wrap2geojson() { jq -s '{ type: "FeatureCollection", features: . }'; } | |||
| 508 | alias cdtrash='cd ~/.local/share/Trash' | 528 | alias cdtrash='cd ~/.local/share/Trash' |
| 509 | trash() { mv $@ ~/.local/share/Trash; } | 529 | trash() { mv $@ ~/.local/share/Trash; } |
| 510 | alias ge='graph-easy --boxart' | 530 | alias ge='graph-easy --boxart' |
| 511 | 531 | # }}} | |
| 512 | # pass | 532 | # tmp{{{ |
| 513 | alias chp='tig -C ~/.password-store' | ||
| 514 | alias chpass='tig -C ~/.password-store' | ||
| 515 | alias cdpass='cd ~/.password-store' | ||
| 516 | alias p='pass' | ||
| 517 | alias pc='pass -c' | ||
| 518 | alias pe='pass edit' | ||
| 519 | alias pgn='pass generate --in-place --clip' | ||
| 520 | alias pgc='pass generate --clip' | ||
| 521 | words() { | ||
| 522 | cat /usr/share/dict/usa | grep -E "^[a-z]{4,8}$" | shuf | head -40 | xargs -n${1:-2} | ||
| 523 | } | ||
| 524 | |||
| 525 | # Nginx | ||
| 526 | alias vgx='sudo vim /etc/nginx/sites-enabled/vps && sudo nginx -t && sudo systemctl reload nginx' | ||
| 527 | alias cdngx='cd /etc/nginx' | ||
| 528 | |||
| 529 | # tmp | ||
| 530 | alias stew='cd ~/git/mapstew' | 533 | alias stew='cd ~/git/mapstew' |
| 531 | alias vc='vultr-cli' | 534 | alias vc='vultr-cli' |
| 532 | alias xkb='cd $SETTING_DIR && make xkb' | 535 | alias xkb='cd $SETTING_DIR && make xkb' |
| @@ -538,36 +541,4 @@ alias md='reveal' | |||
| 538 | alias terminal.color='printf "\e[%dm%d dark\e[0m \e[%d;1m%d bold\e[0m\n" {30..37}{,,,}' | 541 | alias terminal.color='printf "\e[%dm%d dark\e[0m \e[%d;1m%d bold\e[0m\n" {30..37}{,,,}' |
| 539 | alias gpg.bye='gpg-connect-agent reloadagent /bye' | 542 | alias gpg.bye='gpg-connect-agent reloadagent /bye' |
| 540 | alias npm='pnpm' | 543 | alias npm='pnpm' |
| 541 | 544 | # }}} | |
| 542 | # GIS | ||
| 543 | TAIWAN_BBOX='118.1036,20.72799,122.9312,26.60305' | ||
| 544 | TAIWAN_BBOX_V='20.72799,118.1036,26.60305,122.9312' | ||
| 545 | TAIPEI_BBOX='121.346,24.926,121.676,25.209' | ||
| 546 | TAIPEI_BBOX_V='24.926,121.346,25.209,121.676' | ||
| 547 | |||
| 548 | # Comment out | ||
| 549 | #alias mm='mkvmerge -o out.webm -w 01.webm + 02.webm' | ||
| 550 | #alias we='weechat' | ||
| 551 | |||
| 552 | LOCAL_ALIAS=~/.config/local.alias | ||
| 553 | alias allo="$EDITOR $LOCAL_ALIAS && source $LOCAL_ALIAS" | ||
| 554 | if [ -e $LOCAL_ALIAS ]; then | ||
| 555 | source $LOCAL_ALIAS | ||
| 556 | fi | ||
| 557 | |||
| 558 | vvv() { | ||
| 559 | while true; do | ||
| 560 | vim -c 'norm ' | ||
| 561 | if [ $? -ne 0 ]; then | ||
| 562 | break | ||
| 563 | fi | ||
| 564 | echo "restarting vim..."; | ||
| 565 | done | ||
| 566 | } | ||
| 567 | |||
| 568 | ip.neigh() { | ||
| 569 | INTERFACES=$(ifconfig | sed -nE 's/^([^ :]+).*$/\1/p') | ||
| 570 | test -z "$1" && echo $INTERFACES && return 0 | ||
| 571 | |||
| 572 | ifconfig | sed -nE "/^${1}/,/^$/ s/^ +inet ([0-9.]+) .*$/\1/p" | ||
| 573 | } | ||
| @@ -29,6 +29,7 @@ find $SETTING_DIR/bin -not -executable -name '*rc' | while read rcfile; do sourc | |||
| 29 | 29 | ||
| 30 | # local | 30 | # local |
| 31 | PATH=$PATH:$HOME/.local/bin | 31 | PATH=$PATH:$HOME/.local/bin |
| 32 | PATH=$PATH:$HOME/.local/share/gem/ruby/3.2.0/bin | ||
| 32 | # go | 33 | # go |
| 33 | PATH=$PATH:$HOME/go/bin | 34 | PATH=$PATH:$HOME/go/bin |
| 34 | # android-studio | 35 | # android-studio |
diff --git a/vim/init/config.vim b/vim/init/config.vim index 8be42b4..680a5fc 100644 --- a/vim/init/config.vim +++ b/vim/init/config.vim | |||
| @@ -12,131 +12,12 @@ augroup DeleteUnnamedEmptBuffer! | |||
| 12 | augroup END | 12 | augroup END |
| 13 | 13 | ||
| 14 | " }}} | 14 | " }}} |
| 15 | " Small Terminal {{{ | ||
| 16 | |||
| 17 | augroup TerminalSize | ||
| 18 | au! | ||
| 19 | function! LayoutForSmallTerminal(bound) | ||
| 20 | if &lines < a:bound || g:alacritty_extra_padding | ||
| 21 | silent! set laststatus=0 showtabline=0 signcolumn=0 nowrap scrolloff=1 | ||
| 22 | else | ||
| 23 | silent! set laststatus& showtabline=2 signcolumn& scrolloff& | ||
| 24 | endif | ||
| 25 | endfunc | ||
| 26 | autocmd VimEnter,VimResized * silent call LayoutForSmallTerminal(20) | ||
| 27 | autocmd VimLeave,VimSuspend * if g:alacritty_extra_padding | silent call ToggleWinPadding(100) | endif | ||
| 28 | augroup END | ||
| 29 | |||
| 30 | " }}} | ||
| 31 | " Big File {{{ | ||
| 32 | |||
| 33 | augroup BigFileDisable | ||
| 34 | autocmd! | ||
| 35 | autocmd BufReadPre,FileReadPre * if getfsize(expand("%")) > 512 * 1024 | setlocal eventignore=all | endif | ||
| 36 | augroup END | ||
| 37 | "}}} | ||
| 38 | " X11 {{{ | ||
| 39 | |||
| 40 | " Change IM to US when exit to Normal mode | ||
| 41 | autocmd InsertLeave * :silent !fcitx-remote -c &>/dev/null || true | ||
| 42 | |||
| 43 | " }}} | ||
| 44 | " TMUX {{{ | ||
| 45 | |||
| 46 | " 有 tmux 何没有的功能键超时(毫秒) | ||
| 47 | if $TMUX != '' | ||
| 48 | set ttimeoutlen=30 | ||
| 49 | elseif &ttimeoutlen > 80 || &ttimeoutlen <= 0 | ||
| 50 | set ttimeoutlen=80 | ||
| 51 | endif | ||
| 52 | |||
| 53 | " 防止tmux下vim的背景色显示异常 | ||
| 54 | " Refer: http://sunaku.github.io/vim-256color-bce.html | ||
| 55 | if &term =~ '256color' && $TMUX != '' | ||
| 56 | " disable Background Color Erase (BCE) so that color schemes | ||
| 57 | " render properly when inside 256-color tmux and GNU screen. | ||
| 58 | set t_ut= | ||
| 59 | endif | ||
| 60 | |||
| 61 | |||
| 62 | " Ref: https://gist.github.com/andersevenrud/015e61af2fd264371032763d4ed965b6 | ||
| 63 | " You might have to force true color when using regular vim inside tmux as the | ||
| 64 | " colorscheme can appear to be grayscale with 'termguicolors' option enabled. | ||
| 65 | if !has('gui_running') && &term =~ '^\%(screen\|tmux\)' | ||
| 66 | let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" | ||
| 67 | let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" | ||
| 68 | endif | ||
| 69 | |||
| 70 | " }}} | ||
| 71 | " KeyCode {{{ | ||
| 72 | |||
| 73 | "---------------------------------------------------------------------- | ||
| 74 | " 终端下允许 ALT,详见:http://www.skywind.me/blog/archives/2021 | ||
| 75 | " 记得设置 ttimeout (见 init-basic.vim) 和 ttimeoutlen (上面) | ||
| 76 | "---------------------------------------------------------------------- | ||
| 77 | if has('nvim') == 0 && has('gui_running') == 0 | ||
| 78 | function! s:metacode(key) | ||
| 79 | exec "set <M-".a:key.">=\e".a:key | ||
| 80 | endfunc | ||
| 81 | " set 0-9 | ||
| 82 | for i in range(10) | ||
| 83 | call s:metacode(nr2char(char2nr('0') + i)) | ||
| 84 | endfor | ||
| 85 | " set a-z A-Z | ||
| 86 | for i in range(26) | ||
| 87 | call s:metacode(nr2char(char2nr('a') + i)) | ||
| 88 | call s:metacode(nr2char(char2nr('A') + i)) | ||
| 89 | endfor | ||
| 90 | for c in [',', '.', '/', ';', '{', '}'] | ||
| 91 | call s:metacode(c) | ||
| 92 | endfor | ||
| 93 | for c in ['?', ':', '-', '_', '+', '=', "'"] | ||
| 94 | call s:metacode(c) | ||
| 95 | endfor | ||
| 96 | endif | ||
| 97 | |||
| 98 | "---------------------------------------------------------------------- | ||
| 99 | " 功能键终端码矫正 | ||
| 100 | "---------------------------------------------------------------------- | ||
| 101 | function! s:key_escape(name, code) | ||
| 102 | if has('nvim') == 0 && has('gui_running') == 0 | ||
| 103 | exec "set ".a:name."=\e".a:code | ||
| 104 | endif | ||
| 105 | endfunc | ||
| 106 | |||
| 107 | call s:key_escape('<F1>', 'OP') | ||
| 108 | call s:key_escape('<F2>', 'OQ') | ||
| 109 | call s:key_escape('<F3>', 'OR') | ||
| 110 | call s:key_escape('<F4>', 'OS') | ||
| 111 | call s:key_escape('<S-F1>', '[1;2P') | ||
| 112 | call s:key_escape('<S-F2>', '[1;2Q') | ||
| 113 | call s:key_escape('<S-F3>', '[1;2R') | ||
| 114 | call s:key_escape('<S-F4>', '[1;2S') | ||
| 115 | call s:key_escape('<S-F5>', '[15;2~') | ||
| 116 | call s:key_escape('<S-F6>', '[17;2~') | ||
| 117 | call s:key_escape('<S-F7>', '[18;2~') | ||
| 118 | call s:key_escape('<S-F8>', '[19;2~') | ||
| 119 | call s:key_escape('<S-F9>', '[20;2~') | ||
| 120 | call s:key_escape('<S-F10>', '[21;2~') | ||
| 121 | call s:key_escape('<S-F11>', '[23;2~') | ||
| 122 | call s:key_escape('<S-F12>', '[24;2~') | ||
| 123 | |||
| 124 | " }}} | ||
| 125 | " Filetype {{{ | 15 | " Filetype {{{ |
| 126 | 16 | ||
| 127 | augroup InitFileTypes | 17 | augroup InitFileTypes |
| 128 | 18 | ||
| 129 | au! | 19 | au! |
| 130 | 20 | ||
| 131 | " Filetype for Vim {{{ | ||
| 132 | |||
| 133 | " Help page | ||
| 134 | autocmd BufEnter * if &filetype == 'help' | wincmd T | set buflisted nofoldenable | endif | ||
| 135 | |||
| 136 | " quickfix: hide line number | ||
| 137 | autocmd FileType quickfix setlocal nonumber | ||
| 138 | |||
| 139 | " }}} | ||
| 140 | " Shebeng: Set filetype from shebeng {{{ | 21 | " Shebeng: Set filetype from shebeng {{{ |
| 141 | function! s:ApplyShebang() | 22 | function! s:ApplyShebang() |
| 142 | let l:filetype = matchstr(getline(1), '^#!.*[ /]\zs[[:alnum:]]\+$') | 23 | let l:filetype = matchstr(getline(1), '^#!.*[ /]\zs[[:alnum:]]\+$') |
| @@ -150,6 +31,18 @@ augroup InitFileTypes | |||
| 150 | endfunc | 31 | endfunc |
| 151 | autocmd BufReadPost * call <SID>ApplyShebang() | 32 | autocmd BufReadPost * call <SID>ApplyShebang() |
| 152 | " }}} | 33 | " }}} |
| 34 | " Conf {{{ | ||
| 35 | autocmd FileType conf set foldmethod=marker | ||
| 36 | " }}} | ||
| 37 | " Vim {{{ | ||
| 38 | |||
| 39 | " Help page | ||
| 40 | autocmd BufEnter * if &filetype == 'help' | wincmd T | set buflisted nofoldenable | endif | ||
| 41 | |||
| 42 | " quickfix: hide line number | ||
| 43 | autocmd FileType quickfix setlocal nonumber | ||
| 44 | |||
| 45 | " }}} | ||
| 153 | " Markdown {{{ | 46 | " Markdown {{{ |
| 154 | 47 | ||
| 155 | au FileType markdown call InitMarkdownFile() | 48 | au FileType markdown call InitMarkdownFile() |
| @@ -341,6 +234,119 @@ augroup InitFileTypes | |||
| 341 | " }}} | 234 | " }}} |
| 342 | 235 | ||
| 343 | augroup END | 236 | augroup END |
| 237 | " }}} | ||
| 238 | " Small Terminal {{{ | ||
| 239 | |||
| 240 | augroup TerminalSize | ||
| 241 | au! | ||
| 242 | function! LayoutForSmallTerminal(bound) | ||
| 243 | if &lines < a:bound || g:alacritty_extra_padding | ||
| 244 | silent! set laststatus=0 showtabline=0 signcolumn=0 nowrap scrolloff=1 | ||
| 245 | else | ||
| 246 | silent! set laststatus& showtabline=2 signcolumn& scrolloff& | ||
| 247 | endif | ||
| 248 | endfunc | ||
| 249 | autocmd VimEnter,VimResized * silent call LayoutForSmallTerminal(20) | ||
| 250 | autocmd VimLeave,VimSuspend * if g:alacritty_extra_padding | silent call ToggleWinPadding(100) | endif | ||
| 251 | augroup END | ||
| 252 | |||
| 253 | " }}} | ||
| 254 | " Big File {{{ | ||
| 255 | |||
| 256 | augroup BigFileDisable | ||
| 257 | autocmd! | ||
| 258 | autocmd BufReadPre,FileReadPre * if getfsize(expand("%")) > 512 * 1024 | setlocal eventignore=all | endif | ||
| 259 | augroup END | ||
| 344 | 260 | ||
| 261 | "}}} | ||
| 262 | " X11 {{{ | ||
| 263 | |||
| 264 | " Change IM to US when exit to Normal mode | ||
| 265 | autocmd InsertLeave * :silent !fcitx-remote -c &>/dev/null || true | ||
| 266 | |||
| 267 | " }}} | ||
| 268 | " TMUX {{{ | ||
| 269 | |||
| 270 | " 有 tmux 何没有的功能键超时(毫秒) | ||
| 271 | if $TMUX != '' | ||
| 272 | set ttimeoutlen=30 | ||
| 273 | elseif &ttimeoutlen > 80 || &ttimeoutlen <= 0 | ||
| 274 | set ttimeoutlen=80 | ||
| 275 | endif | ||
| 276 | |||
| 277 | " 防止tmux下vim的背景色显示异常 | ||
| 278 | " Refer: http://sunaku.github.io/vim-256color-bce.html | ||
| 279 | if &term =~ '256color' && $TMUX != '' | ||
| 280 | " disable Background Color Erase (BCE) so that color schemes | ||
| 281 | " render properly when inside 256-color tmux and GNU screen. | ||
| 282 | set t_ut= | ||
| 283 | endif | ||
| 284 | |||
| 285 | |||
| 286 | " Ref: https://gist.github.com/andersevenrud/015e61af2fd264371032763d4ed965b6 | ||
| 287 | " You might have to force true color when using regular vim inside tmux as the | ||
| 288 | " colorscheme can appear to be grayscale with 'termguicolors' option enabled. | ||
| 289 | if !has('gui_running') && &term =~ '^\%(screen\|tmux\)' | ||
| 290 | let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" | ||
| 291 | let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" | ||
| 292 | endif | ||
| 293 | |||
| 294 | " }}} | ||
| 295 | " KeyCode {{{ | ||
| 296 | |||
| 297 | "---------------------------------------------------------------------- | ||
| 298 | " 终端下允许 ALT,详见:http://www.skywind.me/blog/archives/2021 | ||
| 299 | " 记得设置 ttimeout (见 init-basic.vim) 和 ttimeoutlen (上面) | ||
| 300 | "---------------------------------------------------------------------- | ||
| 301 | if has('nvim') == 0 && has('gui_running') == 0 | ||
| 302 | function! s:metacode(key) | ||
| 303 | exec "set <M-".a:key.">=\e".a:key | ||
| 304 | endfunc | ||
| 305 | " set 0-9 | ||
| 306 | for i in range(10) | ||
| 307 | call s:metacode(nr2char(char2nr('0') + i)) | ||
| 308 | endfor | ||
| 309 | " set a-z A-Z | ||
| 310 | for i in range(26) | ||
| 311 | call s:metacode(nr2char(char2nr('a') + i)) | ||
| 312 | call s:metacode(nr2char(char2nr('A') + i)) | ||
| 313 | endfor | ||
| 314 | for c in [',', '.', '/', ';', '{', '}'] | ||
| 315 | call s:metacode(c) | ||
| 316 | endfor | ||
| 317 | for c in ['?', ':', '-', '_', '+', '=', "'"] | ||
| 318 | call s:metacode(c) | ||
| 319 | endfor | ||
| 320 | endif | ||
| 321 | |||
| 322 | "---------------------------------------------------------------------- | ||
| 323 | " 功能键终端码矫正 | ||
| 324 | "---------------------------------------------------------------------- | ||
| 325 | function! s:key_escape(name, code) | ||
| 326 | if has('nvim') == 0 && has('gui_running') == 0 | ||
| 327 | exec "set ".a:name."=\e".a:code | ||
| 328 | endif | ||
| 329 | endfunc | ||
| 330 | |||
| 331 | call s:key_escape('<F1>', 'OP') | ||
| 332 | call s:key_escape('<F2>', 'OQ') | ||
| 333 | call s:key_escape('<F3>', 'OR') | ||
| 334 | call s:key_escape('<F4>', 'OS') | ||
| 335 | call s:key_escape('<S-F1>', '[1;2P') | ||
| 336 | call s:key_escape('<S-F2>', '[1;2Q') | ||
| 337 | call s:key_escape('<S-F3>', '[1;2R') | ||
| 338 | call s:key_escape('<S-F4>', '[1;2S') | ||
| 339 | call s:key_escape('<S-F5>', '[15;2~') | ||
| 340 | call s:key_escape('<S-F6>', '[17;2~') | ||
| 341 | call s:key_escape('<S-F7>', '[18;2~') | ||
| 342 | call s:key_escape('<S-F8>', '[19;2~') | ||
| 343 | call s:key_escape('<S-F9>', '[20;2~') | ||
| 344 | call s:key_escape('<S-F10>', '[21;2~') | ||
| 345 | call s:key_escape('<S-F11>', '[23;2~') | ||
| 346 | call s:key_escape('<S-F12>', '[24;2~') | ||
| 347 | |||
| 348 | " }}} | ||
| 349 | " Others {{{ | ||
| 345 | let g:ale_lint_on_save = 1 | 350 | let g:ale_lint_on_save = 1 |
| 346 | let g:ale_fix_on_save = 1 | 351 | let g:ale_fix_on_save = 1 |
| 352 | " }}} | ||