diff options
author | Hsieh Chin Fan <pham@topo.tw> | 2024-11-07 10:58:29 +0800 |
---|---|---|
committer | Hsieh Chin Fan <pham@topo.tw> | 2024-11-07 10:58:29 +0800 |
commit | 0f098771b18d6d6525fc771bd85c822ab89365f0 (patch) | |
tree | d24e13431b3790c2f8832e1ae74d135c3d96a001 | |
parent | 03e2ddb836f71189872a6465b4b83e8af7fa3131 (diff) |
Update
-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 | " }}} | ||