mirror of
https://github.com/rydesun/dotfiles.git
synced 2025-12-26 14:44:58 +08:00
Merge branch 'master' into termux
This commit is contained in:
commit
9d9b9ae2d3
11 changed files with 251 additions and 198 deletions
|
|
@ -25,3 +25,5 @@
|
|||
rebase = true
|
||||
[credential]
|
||||
helper = cache
|
||||
[url "https://github.com"]
|
||||
insteadOf = git://github.com
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
prefix=${XDG_DATA_HOME}/npm
|
||||
cache=${XDG_CACHE_HOME}/npm
|
||||
tmp=${XDG_RUNTIME_DIR}/npm
|
||||
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js
|
||||
registry=https://registry.npm.taobao.org/
|
||||
1
.config/zsh/.gitignore
vendored
Normal file
1
.config/zsh/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
/hostrc.d/env.zsh
|
||||
1
.config/zsh/.zprofile
Normal file
1
.config/zsh/.zprofile
Normal file
|
|
@ -0,0 +1 @@
|
|||
source ${ZDOTDIR}/zprofile
|
||||
|
|
@ -1,189 +1 @@
|
|||
# zle基础配置
|
||||
setopt no_beep # 不响铃
|
||||
setopt correct # 修正命令
|
||||
setopt interactive_comments # 交互模式支持注释
|
||||
|
||||
# 与当前主机相关的配置
|
||||
if [[ -d ${XDG_CONFIG_HOME}/zsh/hostrc.d ]]; then
|
||||
for f in ${XDG_CONFIG_HOME}/zsh/hostrc.d/?*.zsh; do
|
||||
source $f
|
||||
done; unset f
|
||||
fi
|
||||
|
||||
# 插件 <<<------------------------------
|
||||
command -v antibody &>/dev/null && source <(antibody init) && \
|
||||
antibody bundle <<EOF
|
||||
skywind3000/z.lua
|
||||
zsh-users/zsh-completions
|
||||
zsh-users/zsh-autosuggestions
|
||||
zsh-users/zsh-syntax-highlighting
|
||||
EOF
|
||||
# z.lua <<<-----------------------------
|
||||
# 数据文件路径
|
||||
export _ZL_DATA=${XDG_DATA_HOME}/zsh/zlua
|
||||
# 仅在当前路径$PWD改变时才更新数据库
|
||||
export _ZL_ADD_ONCE=1
|
||||
# 在跳转后显示目标路径名称
|
||||
export _ZL_ECHO=1
|
||||
# 增强匹配模式
|
||||
export _ZL_MATCH_MODE=1
|
||||
# >>>-----------------------------------
|
||||
# zsh-autosuggestions <<<---------------
|
||||
# 建议策略: history, completion, match_prev_cmd
|
||||
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
|
||||
# 开启异步模式
|
||||
ZSH_AUTOSUGGEST_USE_ASYNC=1
|
||||
# >>>-----------------------------------
|
||||
# pkgfile: 命令找不到时提示安装包
|
||||
if [[ -f /usr/share/doc/pkgfile/command-not-found.zsh ]]; then
|
||||
source /usr/share/doc/pkgfile/command-not-found.zsh
|
||||
fi
|
||||
# function: 模仿fish折叠路径
|
||||
if [[ -f ${ZDOTDIR}/functions/fish_collapsed_pwd.zsh ]]; then
|
||||
source ${ZDOTDIR}/functions/fish_collapsed_pwd.zsh
|
||||
fi
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 历史记录 <<<--------------------------
|
||||
HISTSIZE=10000
|
||||
SAVEHIST=100000
|
||||
setopt share_history
|
||||
# 去掉重复和空白
|
||||
setopt hist_ignore_dups hist_reduce_blanks hist_find_no_dups
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 命令补全 <<<--------------------------
|
||||
autoload -Uz compinit
|
||||
# 指定缓存文件所在目录必须先确保该目录存在
|
||||
if [[ ! -d ${XDG_CACHE_HOME}/zsh/ ]]; then
|
||||
mkdir -p ${XDG_CACHE_HOME}/zsh/
|
||||
fi
|
||||
compinit -d ${XDG_CACHE_HOME}/zsh/zcompdump-${ZSH_VERSION}
|
||||
setopt complete_aliases # 补全别名
|
||||
setopt list_packed # 补全列表压缩列宽
|
||||
zstyle :compinstall filename ${XDG_CONFIG_HOME}/zsh/.zshrc
|
||||
zstyle ':completion:*' menu select
|
||||
# 模糊修正
|
||||
zstyle ':completion:*' matcher-list '' 'm:{-a-zA-Z}={_A-Za-z}'
|
||||
# fzf
|
||||
if [[ -f /usr/share/fzf/completion.zsh ]]; then
|
||||
source /usr/share/fzf/completion.zsh
|
||||
fi
|
||||
export FZF_COMPLETION_TRIGGER='~~'
|
||||
export FZF_DEFAULT_COMMAND='rg --files --no-ignore --hidden'
|
||||
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 按键绑定 <<<--------------------------
|
||||
# 默认Emacs
|
||||
bindkey -e
|
||||
# fzf
|
||||
if [[ -f /usr/share/fzf/key-bindings.zsh ]]; then
|
||||
source /usr/share/fzf/key-bindings.zsh
|
||||
fi
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 提示符 <<<----------------------------
|
||||
setopt prompt_subst
|
||||
autoload -Uz promptinit
|
||||
promptinit
|
||||
autoload -Uz colors
|
||||
colors
|
||||
setopt transient_rprompt # 右提示符只出现一次
|
||||
|
||||
if [[ -n ${_SPEC_color_host} ]]; then
|
||||
_color_host=${_SPEC_color_host}
|
||||
else
|
||||
_color_host=$'%{\e[38;2;199;146;234m%}'
|
||||
fi
|
||||
_color_invert=$'%{\e[7m%}'
|
||||
_color_reset=$'%{\e[0m%}'
|
||||
if [[ -z ${_SPEC_PROMPT_disable_icon} ]]; then
|
||||
_icon_error="😈"
|
||||
_icon_gitdir=" "
|
||||
fi
|
||||
|
||||
ZLE_RPROMPT_INDENT=-1 # 去掉右提示符右侧多余空白
|
||||
precmd() {
|
||||
# 上一条命令的运行结果
|
||||
if [ $? -ne 0 ]; then
|
||||
PROMPT_err="%{$bg[red]$fg[black]%} ${_icon_error:-E} %{$reset_color%}"
|
||||
else
|
||||
PROMPT_err=""
|
||||
fi
|
||||
|
||||
if command -v _fish_collapsed_pwd &>/dev/null; then
|
||||
_collapsed_pwd=$(_fish_collapsed_pwd)
|
||||
fi
|
||||
PROMPT_host="${_color_host}${_color_invert} %n@%m ${_color_reset}"
|
||||
# ssh标志
|
||||
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
|
||||
PROMPT_ssh="%{$bg[yellow]$fg[black]%} ssh %{$reset_color%}"
|
||||
else
|
||||
PROMPT_ssh=""
|
||||
fi
|
||||
# tmux标志
|
||||
if [ -n "$TMUX" ]; then
|
||||
PROMPT_tmux="%{$bg[green]$fg[black]%} tmux %{$reset_color%}"
|
||||
else
|
||||
PROMPT_tmux=""
|
||||
fi
|
||||
# python virtualenv标志
|
||||
if [ -n "$VIRTUAL_ENV" ]; then
|
||||
PROMPT_pyvenv="%{$bg[cyan]$fg[black]%} pyvenv %{$reset_color%}"
|
||||
else
|
||||
PROMPT_pyvenv=""
|
||||
fi
|
||||
if command -v __git_ps1 &>/dev/null; then
|
||||
PROMPT_git=$(__git_ps1 " %s${_icon_gitdir:-)}")
|
||||
fi
|
||||
PROMPT_cwd=${_collapsed_pwd}
|
||||
if [[ $UID == 0 || $EUID == 0 ]]; then
|
||||
PROMPT_tail=" # "
|
||||
else
|
||||
PROMPT_tail=" $ "
|
||||
fi
|
||||
|
||||
PROMPT="${_color_host}▒${PROMPT_git} ${PROMPT_cwd}${PROMPT_tail}${_color_reset}"
|
||||
RPROMPT="${PROMPT_err}${PROMPT_pyvenv}${PROMPT_tmux}${PROMPT_ssh}${PROMPT_host}"
|
||||
|
||||
# 设置终端标题
|
||||
print -n "\e]0;zsh ( ${_collapsed_pwd} )\a"
|
||||
}
|
||||
# git <<<-------------------------------
|
||||
if [[ -f /usr/share/git/completion/git-prompt.sh ]]; then
|
||||
source /usr/share/git/completion/git-prompt.sh
|
||||
fi
|
||||
GIT_PS1_SHOWDIRTYSTATE=1
|
||||
GIT_PS1_SHOWSTASHSTATE=1
|
||||
GIT_PS1_SHOWUNTRACKEDFILES=1
|
||||
GIT_PS1_STATESEPARATOR=
|
||||
GIT_PS1_SHOWUPSTREAM="auto"
|
||||
GIT_PS1_DESCRIBE_STYLE="default"
|
||||
# >>>-----------------------------------
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 命令别名 <<<-----------------------------
|
||||
# sudo后面的命令可以是别名
|
||||
alias sudo='sudo '
|
||||
# 设置命令默认行为
|
||||
alias ls='ls --color=auto --time-style=iso --human-readable'
|
||||
alias grep='grep --color=auto'
|
||||
alias diff='diff --color=auto'
|
||||
alias mv='mv -i'
|
||||
|
||||
alias sl='ls'
|
||||
alias l='ls -l'
|
||||
alias la='ls -Al'
|
||||
mcd() { mkdir -p $1 && cd $1 }
|
||||
|
||||
alias v='nvim -R -c "nnoremap q :exit<CR>"' && compdef v=nvim # 使用neovim作为pager
|
||||
alias e='nvim' && compdef e=nvim
|
||||
alias es='nvim -S' && compdef es=nvim
|
||||
alias g='git' && compdef g=git
|
||||
alias py='python' && compdef py=python
|
||||
alias config='/usr/bin/git --git-dir=$HOME/.myconf/ --work-tree=$HOME' && compdef config=git
|
||||
alias ssh='TERM=xterm-256color ssh'
|
||||
# >>>-----------------------------------
|
||||
|
||||
# vim: foldmethod=marker:foldmarker=<<<---,>>>---
|
||||
source ${ZDOTDIR}/zshrc
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
#! /usr/bin/env zsh
|
||||
|
||||
# https://zhuanlan.zhihu.com/p/51008087
|
||||
function _fish_collapsed_pwd() {
|
||||
() {
|
||||
local pwd="$1"
|
||||
# fix end slash
|
||||
local home="${HOME%/}"
|
||||
|
|
@ -42,3 +40,5 @@ function _fish_collapsed_pwd() {
|
|||
local IFS="/"
|
||||
echo "${elements[*]}"
|
||||
}
|
||||
|
||||
# vim:set filetype=zsh:
|
||||
1
.config/zsh/hostrc.d/.gitignore
vendored
1
.config/zsh/hostrc.d/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
|||
/individual.zsh
|
||||
12
.config/zsh/tools/install.sh
Executable file
12
.config/zsh/tools/install.sh
Executable file
|
|
@ -0,0 +1,12 @@
|
|||
#!/bin/zsh -e
|
||||
|
||||
zinit_bin_dir=${XDG_DATA_HOME:-~/.data}/zinit/bin
|
||||
|
||||
if [[ -e $zinit_bin_dir ]]; then
|
||||
echo Clean up old zinit bin dir.
|
||||
rm -rf $zinit_bin_dir
|
||||
fi
|
||||
|
||||
echo Installing zinit...
|
||||
git clone --depth 1 --single-branch \
|
||||
https://github.com/zdharma/zinit.git $zinit_bin_dir
|
||||
11
.config/zsh/tools/update.sh
Executable file
11
.config/zsh/tools/update.sh
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/zsh -ie
|
||||
|
||||
if command -v zinit &>/dev/null; then
|
||||
echo Updating plugins...
|
||||
zinit update --all --parallel
|
||||
else
|
||||
echo zinit is missing >&2
|
||||
fi
|
||||
|
||||
echo
|
||||
echo Done.
|
||||
220
.config/zsh/zshrc
Normal file
220
.config/zsh/zshrc
Normal file
|
|
@ -0,0 +1,220 @@
|
|||
# 基础配置
|
||||
setopt no_beep # 不响铃
|
||||
setopt correct # 修正命令
|
||||
setopt interactive_comments # 交互模式支持注释
|
||||
|
||||
fpath=(${ZDOTDIR}/functions ${ZDOTDIR}/Completion $fpath)
|
||||
|
||||
# 插件 <<<------------------------------
|
||||
declare -A ZINIT
|
||||
ZINIT[HOME_DIR]=${XDG_DATA_HOME}/zinit
|
||||
ZINIT[BIN_DIR]=${ZINIT[HOME_DIR]}/bin
|
||||
source ${ZINIT[BIN_DIR]}/zinit.zsh
|
||||
|
||||
zinit light zdharma/fast-syntax-highlighting # 语法高亮
|
||||
zinit ice lucid wait atload='_zsh_autosuggest_start'
|
||||
zinit light zsh-users/zsh-autosuggestions # 提示建议
|
||||
zinit ice lucid wait
|
||||
zinit light 'hlissner/zsh-autopair' # 自动闭合符号
|
||||
zinit light zsh-users/zsh-completions # 更多命令补全
|
||||
zinit light skywind3000/z.lua # 快速跳转目录
|
||||
|
||||
# z.lua <<<-----------------------------
|
||||
# 数据文件路径
|
||||
export _ZL_DATA=${XDG_DATA_HOME}/zsh/zlua
|
||||
# 仅在当前路径$PWD改变时才更新数据库
|
||||
export _ZL_ADD_ONCE=1
|
||||
# 在跳转后显示目标路径名称
|
||||
export _ZL_ECHO=1
|
||||
# 增强匹配模式
|
||||
export _ZL_MATCH_MODE=1
|
||||
# >>>-----------------------------------
|
||||
# zsh-autosuggestions <<<---------------
|
||||
# 建议策略: history, completion, match_prev_cmd
|
||||
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
|
||||
# 开启异步模式
|
||||
ZSH_AUTOSUGGEST_USE_ASYNC=1
|
||||
# >>>-----------------------------------
|
||||
# pkgfile: 命令找不到时提示安装包
|
||||
if [[ -f /usr/share/doc/pkgfile/command-not-found.zsh ]]; then
|
||||
source /usr/share/doc/pkgfile/command-not-found.zsh
|
||||
fi
|
||||
# function: 模仿fish折叠路径
|
||||
autoload -Uz fish_collapsed_pwd
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 历史记录 <<<--------------------------
|
||||
HISTSIZE=10000
|
||||
SAVEHIST=100000
|
||||
setopt share_history
|
||||
# 去掉重复和空白
|
||||
setopt hist_ignore_dups hist_reduce_blanks hist_find_no_dups
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 命令补全 <<<--------------------------
|
||||
autoload -Uz compinit
|
||||
# 指定缓存文件所在目录必须先确保该目录存在
|
||||
if [[ ! -d ${XDG_CACHE_HOME}/zsh/ ]]; then
|
||||
mkdir -p ${XDG_CACHE_HOME}/zsh/
|
||||
fi
|
||||
compinit -d ${XDG_CACHE_HOME}/zsh/zcompdump-${ZSH_VERSION}
|
||||
|
||||
# 补全失败时的提示
|
||||
zstyle ':completion:*:warnings' format $'\e[31m -- No Matches Found --\e[0m'
|
||||
setopt complete_aliases # 补全别名
|
||||
setopt list_packed # 补全列表压缩列宽
|
||||
zstyle :compinstall filename ${ZDOTDIR}/zshrc
|
||||
zstyle ':completion:*' menu select
|
||||
# 模糊修正
|
||||
zstyle ':completion:*' matcher-list '' 'm:{-a-zA-Z}={_A-Za-z}'
|
||||
# fzf
|
||||
if [[ -f /usr/share/fzf/completion.zsh ]]; then
|
||||
source /usr/share/fzf/completion.zsh
|
||||
fi
|
||||
export FZF_COMPLETION_TRIGGER='~~'
|
||||
export FZF_DEFAULT_COMMAND='fd -uu -E .git -E .node_modules'
|
||||
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
||||
|
||||
compdef proxychains=command
|
||||
|
||||
# 当前环境的配置
|
||||
for i in ${ZDOTDIR}/hostrc.d/*.zsh; do
|
||||
if [[ -f $i ]]; then
|
||||
source $i
|
||||
fi
|
||||
done; unset i
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 按键绑定 <<<--------------------------
|
||||
# 默认Emacs
|
||||
bindkey -e
|
||||
# 用$EDITOR编辑命令
|
||||
autoload -Uz edit-command-line
|
||||
zle -N edit-command-line
|
||||
bindkey '^X^E' edit-command-line
|
||||
# fzf
|
||||
if [[ -f /usr/share/fzf/key-bindings.zsh ]]; then
|
||||
source /usr/share/fzf/key-bindings.zsh
|
||||
fi
|
||||
# 默认 WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>'
|
||||
export WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 提示符 <<<----------------------------
|
||||
setopt prompt_subst
|
||||
autoload -Uz promptinit
|
||||
promptinit
|
||||
autoload -Uz colors
|
||||
colors
|
||||
setopt transient_rprompt # 右提示符只出现一次
|
||||
|
||||
if [[ -n ${_SPEC_color_host} ]]; then
|
||||
_color_host=${_SPEC_color_host}
|
||||
else
|
||||
_color_host=$'%{\e[38;2;199;146;234m%}'
|
||||
fi
|
||||
_color_invert=$'%{\e[7m%}'
|
||||
_color_reset=$'%{\e[0m%}'
|
||||
if [[ -z ${_SPEC_PROMPT_disable_icon} ]]; then
|
||||
_icon_error=" 😈"
|
||||
_icon_gitdir=" "
|
||||
fi
|
||||
|
||||
ZLE_RPROMPT_INDENT=-1 # 去掉右提示符右侧多余空白
|
||||
precmd() {
|
||||
# 上一条命令的运行结果
|
||||
if [ $? -ne 0 ]; then
|
||||
PROMPT_err=${_icon_error:-E}
|
||||
else
|
||||
PROMPT_err=""
|
||||
fi
|
||||
|
||||
if command -v fish_collapsed_pwd &>/dev/null; then
|
||||
_collapsed_pwd=$(fish_collapsed_pwd)
|
||||
fi
|
||||
if ! (($DISABLE_RPROMPT_host)); then
|
||||
PROMPT_host="${_color_host}${_color_invert} %n@%m ${_color_reset}"
|
||||
fi
|
||||
# ssh标志
|
||||
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
|
||||
PROMPT_ssh="%{$bg[yellow]$fg[black]%} ssh %{$reset_color%}"
|
||||
else
|
||||
PROMPT_ssh=""
|
||||
fi
|
||||
# tmux标志
|
||||
if [ -n "$TMUX" ]; then
|
||||
PROMPT_tmux="%{$bg[green]$fg[black]%} tmux %{$reset_color%}"
|
||||
else
|
||||
PROMPT_tmux=""
|
||||
fi
|
||||
# python virtualenv标志
|
||||
if [ -n "$VIRTUAL_ENV" ]; then
|
||||
PROMPT_pyvenv="%{$bg[cyan]$fg[white]%} pyvenv %{$reset_color%}"
|
||||
else
|
||||
PROMPT_pyvenv=""
|
||||
fi
|
||||
# nvm标志
|
||||
if [ -n "$NVM_BIN" ]; then
|
||||
PROMPT_nvm="%{$bg[cyan]$fg[white]%} nvm %{$reset_color%}"
|
||||
else
|
||||
PROMPT_nvm=""
|
||||
fi
|
||||
if command -v __git_ps1 &>/dev/null; then
|
||||
PROMPT_git=$(__git_ps1 " %s${_icon_gitdir:-)}")
|
||||
fi
|
||||
PROMPT_cwd=${_collapsed_pwd}
|
||||
if [[ $UID == 0 || $EUID == 0 ]]; then
|
||||
PROMPT_tail=" # "
|
||||
else
|
||||
PROMPT_tail=" $ "
|
||||
fi
|
||||
|
||||
PROMPT="${_color_host}${PROMPT_sign}${PROMPT_err}${PROMPT_git} ${PROMPT_cwd}${PROMPT_tail}${_color_reset}"
|
||||
RPROMPT="${PROMPT_pyvenv}${PROMPT_nvm}${PROMPT_tmux}${PROMPT_ssh}${PROMPT_host}"
|
||||
|
||||
# 设置终端标题
|
||||
print -n "\e]0;zsh ( ${_collapsed_pwd} )\a"
|
||||
}
|
||||
# git <<<-------------------------------
|
||||
if [[ -f /usr/share/git/completion/git-prompt.sh ]]; then
|
||||
source /usr/share/git/completion/git-prompt.sh
|
||||
fi
|
||||
GIT_PS1_SHOWDIRTYSTATE=1
|
||||
GIT_PS1_SHOWSTASHSTATE=1
|
||||
GIT_PS1_SHOWUNTRACKEDFILES=1
|
||||
GIT_PS1_STATESEPARATOR=
|
||||
GIT_PS1_SHOWUPSTREAM="auto"
|
||||
GIT_PS1_DESCRIBE_STYLE="default"
|
||||
# >>>-----------------------------------
|
||||
# >>>-----------------------------------
|
||||
|
||||
# 命令别名 <<<-----------------------------
|
||||
# sudo后面的命令可以是别名
|
||||
alias sudo='sudo '
|
||||
# 设置命令默认行为
|
||||
alias ls='ls --color=auto --time-style=iso --human-readable'
|
||||
alias grep='grep --color=auto'
|
||||
alias diff='diff --color=auto'
|
||||
alias mv='mv -i'
|
||||
|
||||
alias sl='ls'
|
||||
alias l='ls -l'
|
||||
alias la='ls -Al'
|
||||
mcd() { mkdir -p $1 && cd $1 }
|
||||
|
||||
alias x='xdg-open'
|
||||
alias v='nvim -R -c "nnoremap q :exit<CR>"' && compdef v=nvim # 使用neovim作为pager
|
||||
if [[ -e $VIMRUNTIME ]]; then
|
||||
alias e='nvr'
|
||||
else
|
||||
alias e='nvim' && compdef e=nvim
|
||||
fi
|
||||
alias g='git' && compdef g=git
|
||||
alias py='python' && compdef py=python
|
||||
alias config='/usr/bin/git --git-dir=$HOME/.myconf/ --work-tree=$HOME' && compdef config=git
|
||||
alias config.edit='GIT_DIR=$HOME/.myconf GIT_WORK_TREE=$HOME nvim' && compdef config.edit=nvim
|
||||
alias ssh='TERM=xterm-256color ssh'
|
||||
alias mountdisk="mount | grep -E '^(/dev/sd|/dev/nvme|/dev/mmcblk|gvfsd-fuse)' | awk '{print \$1 \"\t\" \$5 \"\t\" \$3 \"\n\t\t\" \$6}'"
|
||||
# >>>-----------------------------------
|
||||
|
||||
# vim: foldmethod=marker:foldmarker=<<<---,>>>---
|
||||
Loading…
Add table
Add a link
Reference in a new issue