加载中...

ohmyzsh使用教程

Linux相关,mac安装ohmyzsh,常用配置

mac安装和配置ohmyzsh

  • 1、ohmyzsh项目默认目录为 ~/.ohmyzsh ,github项目地址为:https://github.com/ohmyzsh/ohmyzsh

  • 2、配置文件默认目录为 ~/.zshrc my zshrc save in github

  • 3、安装ohmyzsh

    1
    
    sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    Copied!
  • 4、安装插件

  • 4、安装字体 font-hack-nerd-font

  • 1
    
    brew install font-hack-nerd-font --cask
    Copied!
  • 5、安装主题 dracula https://draculatheme.com/zsh

    • 软连接方式

    • 1
      2
      
      git clone https://github.com/dracula/zsh.git
      ln -s $DRACULA_THEME/dracula.zsh-theme $OH_MY_ZSH/themes/dracula.zsh-theme
      Copied!
    • 文件方式

    • 1
      2
      3
      
      1、Download using the GitHub .zip download option and unzip them.
      2、Move dracula.zsh-theme file to oh-my-zsh's theme folder: oh-my-zsh/themes/dracula.zsh-theme.
      3、Move /lib to oh-my-zsh's theme folder: oh-my-zsh/themes/lib.
      Copied!
    • 我自己修改的 放在 ~/.oh-my-zsh/custom/themes/mydracula.zsh-theme

    •   1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       20
       21
       22
       23
       24
       25
       26
       27
       28
       29
       30
       31
       32
       33
       34
       35
       36
       37
       38
       39
       40
       41
       42
       43
       44
       45
       46
       47
       48
       49
       50
       51
       52
       53
       54
       55
       56
       57
       58
       59
       60
       61
       62
       63
       64
       65
       66
       67
       68
       69
       70
       71
       72
       73
       74
       75
       76
       77
       78
       79
       80
       81
       82
       83
       84
       85
       86
       87
       88
       89
       90
       91
       92
       93
       94
       95
       96
       97
       98
       99
      100
      101
      102
      103
      104
      105
      106
      107
      108
      109
      110
      111
      112
      113
      114
      115
      116
      117
      118
      119
      120
      121
      122
      123
      124
      125
      126
      127
      128
      129
      130
      131
      132
      133
      134
      135
      136
      137
      138
      139
      140
      141
      142
      143
      144
      145
      146
      147
      148
      149
      150
      151
      152
      153
      154
      155
      156
      157
      158
      159
      160
      161
      162
      163
      164
      165
      166
      167
      168
      169
      170
      171
      172
      173
      174
      175
      176
      177
      178
      179
      180
      181
      182
      183
      184
      185
      186
      187
      188
      189
      190
      191
      192
      193
      194
      195
      196
      197
      198
      199
      200
      201
      202
      203
      204
      205
      206
      207
      208
      209
      210
      211
      212
      213
      214
      215
      216
      217
      218
      219
      220
      221
      222
      223
      224
      
      # -*- mode: sh; -*-
      # vim: set ft=sh :
      # Dracula Theme v1.2.5
      #
      # https://github.com/dracula/dracula-theme
      #
      # Copyright 2019, All rights reserved
      #
      # Code licensed under the MIT license
      # http://zenorocha.mit-license.org
      #
      # @author Zeno Rocha <hi@zenorocha.com>
      # @maintainer Avalon Williams <avalonwilliams@protonmail.com>
      
      # Initialization {{{
      source ${0:A:h}/lib/async.zsh
      autoload -Uz add-zsh-hook
      setopt PROMPT_SUBST
      async_init
      PROMPT=''
      # }}}
      
      # Options {{{
      # Set to 0 to disable the git status
      DRACULA_DISPLAY_GIT=${DRACULA_DISPLAY_GIT:-1}
      
      # Set to 1 to show the date
      DRACULA_DISPLAY_TIME=${DRACULA_DISPLAY_TIME:-1}
      
      # Set to 1 to show the 'context' segment
      DRACULA_DISPLAY_CONTEXT=${DRACULA_DISPLAY_CONTEXT:-0}
      
      # Changes the arrow icon
      DRACULA_ARROW_ICON=${DRACULA_ARROW_ICON:-}
      
      # Set to 1 to use an new line for commands
      DRACULA_DISPLAY_NEW_LINE=${DRACULA_DISPLAY_NEW_LINE:-0}
      
      # function to detect if git has support for --no-optional-locks
      dracula_test_git_optional_lock() {
      	local git_version=${DEBUG_OVERRIDE_V:-"$(git version | cut -d' ' -f3)"}
      	local git_version="$(git version | cut -d' ' -f3)"
      	# test for git versions < 2.14.0
      	case "$git_version" in
      		[0-1].*)
      			echo 0
      			return 1
      			;;
      		2.[0-9].*)
      			echo 0
      			return 1
      			;;
      		2.1[0-3].*)
      			echo 0
      			return 1
      			;;
      	esac
      
      	# if version > 2.14.0 return true
      	echo 1
      }
      
      # use --no-optional-locks flag on git
      DRACULA_GIT_NOLOCK=${DRACULA_GIT_NOLOCK:-$(dracula_test_git_optional_lock)}
      # }}}
      
      # Status segment {{{
      # arrow is green if last command was successful, red if not, 
      # turns yellow in vi command mode
      if (( ! DRACULA_DISPLAY_NEW_LINE )); then
      	PROMPT+='%(1V:%F{yellow}:%(?:%F{green}:%F{red}))${DRACULA_ARROW_ICON} '
      fi
      # }}}
      
      # Time segment {{{
      dracula_time_segment() {
      	if (( DRACULA_DISPLAY_TIME )); then
      		if [[ -z "$TIME_FORMAT" ]]; then
      			TIME_FORMAT="%-H:%M:%S"
      			# check if locale uses AM and PM
      			# if ! locale -ck LC_TIME | grep 'am_pm=";"' > /dev/null; then
      			# 	TIME_FORMAT="%-I:%M%p"
      			# fi
      		fi
      
      		print -P "%D{$TIME_FORMAT} "
      	fi
      }
      
      PROMPT+='%F{green}%B$(dracula_time_segment)'
      # }}}
      
      # User context segment {{{
      dracula_context() {
      	if (( DRACULA_DISPLAY_CONTEXT )); then
      		if [[ -n "${SSH_CONNECTION-}${SSH_CLIENT-}${SSH_TTY-}" ]] || (( EUID == 0 )); then
      			echo '%n@%m '
      		else
      			echo '%n '
      		fi
      	fi
      }
      
      PROMPT+='%F{magenta}%B$(dracula_context)'
      # }}}
      
      # Directory segment {{{
      PROMPT+='%F{blue}%B%c '
      # }}}
      
      # Custom variable {{{
      function custom_variable_prompt() {
      	[[ -z $DRACULA_CUSTOM_VARIABLE ]] && return
      	echo "$FG[008]$DRACULA_CUSTOM_VARIABLE "
      }
      PROMPT+='$(custom_variable_prompt)'
      # }}}
      
      # Async git segment {{{
      
      dracula_git_status() {
      	(( ! DRACULA_DISPLAY_GIT )) && return
      	cd "$1"
      
      	local ref branch lockflag
      
      	(( DRACULA_GIT_NOLOCK )) && lockflag="--no-optional-locks"
      
      	ref=$(=git $lockflag symbolic-ref --quiet HEAD 2>/tmp/git-errors)
      
      	case $? in
      		0)   ;;
      		128) return ;;
      		*)   ref=$(=git $lockflag rev-parse --short HEAD 2>/tmp/git-errors) || return ;;
      	esac
      
      	branch=${ref#refs/heads/}
      
      	if [[ -n $branch ]]; then
      		echo -n "${ZSH_THEME_GIT_PROMPT_PREFIX}${branch}"
      
      		local git_status icon
      		git_status="$(LC_ALL=C =git $lockflag status 2>&1)"
      
      		if [[ "$git_status" =~ 'new file:|deleted:|modified:|renamed:|Untracked files:' ]]; then
      			echo -n "$ZSH_THEME_GIT_PROMPT_DIRTY"
      		else
      			echo -n "$ZSH_THEME_GIT_PROMPT_CLEAN"
      		fi
      
      		echo -n "$ZSH_THEME_GIT_PROMPT_SUFFIX"
      	fi
      }
      
      dracula_git_callback() {
      	DRACULA_GIT_STATUS="$3"
      	zle && zle reset-prompt
      	async_stop_worker dracula_git_worker dracula_git_status "$(pwd)"
      }
      
      dracula_git_async() {
      	async_start_worker dracula_git_worker -n
      	async_register_callback dracula_git_worker dracula_git_callback
      	async_job dracula_git_worker dracula_git_status "$(pwd)"
      }
      
      add-zsh-hook precmd dracula_git_async
      
      PROMPT+='$DRACULA_GIT_STATUS'
      
      ZSH_THEME_GIT_PROMPT_CLEAN=") %F{green}%B✔ "
      ZSH_THEME_GIT_PROMPT_DIRTY=") %F{yellow}%B✗ "
      ZSH_THEME_GIT_PROMPT_PREFIX="%F{cyan}%B("
      ZSH_THEME_GIT_PROMPT_SUFFIX="%f%b"
      # }}}
      
      # Linebreak {{{
      if (( DRACULA_DISPLAY_NEW_LINE )); then
      	PROMPT+=$'\n'
      	PROMPT+='%(1V:%F{yellow}:%(?:%F{green}:%F{red}))${DRACULA_ARROW_ICON} '
      fi
      # }}}
      
      # define widget without clobbering old definitions
      dracula_defwidget() {
      	local fname=dracula-wrap-$1
      	local prev=($(zle -l -L "$1"))
      	local oldfn=${prev[4]:-$1}
      
      	# if no existing zle functions, just define it normally
      	if [[ -z "$prev" ]]; then
      		zle -N $1 $2
      		return
      	fi
      
      	# if already defined, return
      	[[ "${prev[4]}" = $fname ]] && return
      
      	oldfn=${prev[4]:-$1}
      
      	zle -N dracula-old-$oldfn $oldfn
      
      	eval "$fname() { $2 \"\$@\"; zle dracula-old-$oldfn -- \"\$@\"; }"
      
      	zle -N $1 $fname
      }
      
      # ensure vi mode is handled by prompt
      dracula_zle_update() {
      	if [[ $KEYMAP = vicmd ]]; then
      		psvar[1]=vicmd
      	else
      		psvar[1]=''
      	fi
      
      	zle reset-prompt
      	zle -R
      }
      
      dracula_defwidget zle-line-init dracula_zle_update
      dracula_defwidget zle-keymap-select dracula_zle_update
      
      # Ensure effects are reset
      PROMPT+='%f%b'
      Copied!
  • 6、配置文件 ~/.zshrc

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    
    # If you come from bash you might have to change your $PATH.
    export PATH=$HOME/bin:/usr/local/bin:$PATH
    
    # Path to your oh-my-zsh installation.
    export ZSH="$HOME/.oh-my-zsh"
    
    # Set name of the theme to load --- if set to "random", it will
    # load a random theme each time oh-my-zsh is loaded, in which case,
    # to know which specific one was loaded, run: echo $RANDOM_THEME
    # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
    #ZSH_THEME="agnoster"
    # ZSH_THEME="dracula"
    ZSH_THEME="mydracula"
    #ZSH_THEME="random"
    
    # Set list of themes to pick from when loading at random
    # Setting this variable when ZSH_THEME=random will cause zsh to load
    # a theme from this variable instead of looking in $ZSH/themes/
    # If set to an empty array, this variable will have no effect.
    # ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
    
    # Uncomment the following line to use case-sensitive completion.
    # CASE_SENSITIVE="true"
    
    # Uncomment the following line to use hyphen-insensitive completion.
    # Case-sensitive completion must be off. _ and - will be interchangeable.
    # HYPHEN_INSENSITIVE="true"
    
    # Uncomment one of the following lines to change the auto-update behavior
    # zstyle ':omz:update' mode disabled  # disable automatic updates
    # zstyle ':omz:update' mode auto      # update automatically without asking
    # zstyle ':omz:update' mode reminder  # just remind me to update when it's time
    
    # Uncomment the following line to change how often to auto-update (in days).
    # zstyle ':omz:update' frequency 13
    
    # Uncomment the following line if pasting URLs and other text is messed up.
    # DISABLE_MAGIC_FUNCTIONS="true"
    
    # Uncomment the following line to disable colors in ls.
    # DISABLE_LS_COLORS="true"
    
    # Uncomment the following line to disable auto-setting terminal title.
    # DISABLE_AUTO_TITLE="true"
    
    # Uncomment the following line to enable command auto-correction.
    # ENABLE_CORRECTION="true"
    
    # Uncomment the following line to display red dots whilst waiting for completion.
    # You can also set it to another string to have that shown instead of the default red dots.
    # e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f"
    # Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765)
    # COMPLETION_WAITING_DOTS="true"
    
    # Uncomment the following line if you want to disable marking untracked files
    # under VCS as dirty. This makes repository status check for large repositories
    # much, much faster.
    # DISABLE_UNTRACKED_FILES_DIRTY="true"
    
    # Uncomment the following line if you want to change the command execution time
    # stamp shown in the history command output.
    # You can set one of the optional three formats:
    # "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
    # or set a custom format using the strftime function format specifications,
    # see 'man strftime' for details.
    HIST_STAMPS="yyyy-mm-dd"
    
    # Would you like to use another custom folder than $ZSH/custom?
    # ZSH_CUSTOM=/path/to/new-custom-folder
    
    # Which plugins would you like to load?
    # Standard plugins can be found in $ZSH/plugins/
    # Custom plugins may be added to $ZSH_CUSTOM/plugins/
    # Example format: plugins=(rails git textmate ruby lighthouse)
    # Add wisely, as too many plugins slow down shell startup.
    # zsh-syntax-highlighting:~/.oh-my-zsh/custom/plugins,https://github.com/zsh-users/zsh-syntax-highlighting
    # zsh-autosuggestions:~/.oh-my-zsh/custom/plugins,https://github.com/zsh-users/zsh-autosuggestions
    plugins=(
               git 
               colored-man-pages
               # macos
               # 以下需要自己安装
    #~/.oh-my-zsh/custom/plugins,https://github.com/zsh-users/zsh-syntax-highlighting
               zsh-syntax-highlighting
    #~/.oh-my-zsh/custom/plugins,https://github.com/zsh-users/zsh-autosuggestions
               zsh-autosuggestions
    #brew install autojump 
               autojump
    )
    
    source $ZSH/oh-my-zsh.sh
    
    # User configuration
    
    # export MANPATH="/usr/local/man:$MANPATH"
    
    # You may need to manually set your language environment
    # export LANG=en_US.UTF-8
    
    # Preferred editor for local and remote sessions
    # if [[ -n $SSH_CONNECTION ]]; then
    #   export EDITOR='vim'
    # else
    #   export EDITOR='mvim'
    # fi
    
    # Compilation flags
    # export ARCHFLAGS="-arch x86_64"
    
    # Set personal aliases, overriding those provided by oh-my-zsh libs,
    # plugins, and themes. Aliases can be placed here, though oh-my-zsh
    # users are encouraged to define aliases within the ZSH_CUSTOM folder.
    # For a full list of active aliases, run `alias`.
    #
    # Example aliases
    # alias zshconfig="mate ~/.zshrc"
    # alias ohmyzsh="mate ~/.oh-my-zsh"
    
    # 去重 zsh_history
    #setopt HIST_IGNORE_ALL_DUPS
    #setopt HIST_IGNORE_SPACE
    
    # proxy
    #alias setproxy="export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890"
    #alias unproxy="unset http_proxy;unset https_proxy;unset ALL_PROXY"
    
    # git-proxy
    #alias gitProxy="git config --global http.proxy socks5://127.0.0.1:7890;git config --global https.proxy socks5://127.0.0.1:7890"
    #alias gitUnproxy="git config --global --unset http.proxy;git config --global --unset https.proxy"
    # 上面alias舍弃,代理用自定义函数方式去做
    
    # maven
    export MAVEN_HOME=~/Data/Software/apache-maven-3.6.3
    export PATH=$MAVEN_HOME/bin:$PATH
    
    # java
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk/Contents/Home
    export PATH=$JAVA_HOME/bin:$PATH
    
    # brew 清华镜像源
    export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
    export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
    export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"
    
    # brew命令
    alias brewtree="brew deps --tree --installed"
    alias brewlist="brew leaves | xargs brew deps  --installed --for-each | sed 's/^.*:/$(tput setaf 4)&$(tput sgr0)/'"
    # java多版本
    export PATH="$HOME/.jenv/bin:$PATH"
    eval "$(jenv init -)"
    
    # ls颜色和图标
    alias ls="lsd"
    # alias ll="lsd -lh"
    # alias l="lsd -alh"
    
    # bat主题
    export BAT_THEME="Dracula"
    
    # python
    alias python2='/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7' 
    alias python3='/usr/local/opt/python@3.10/bin/python3' 
    alias python=python3
    alias pips='/usr/bin/pip3'
    alias pip='/usr/local/opt/python@3.10/bin/pip3'
    
    # top替代
    alias btop="bpytop"
    
    # tree颜色
    alias trees="\tree -C"
    
    
    # 加载自定义函数
    alias au="autoload -U" 
    fpath+=~/Data/Config/my-functions
    autoload -U setproxy unproxy getproxy
    
    # 重载配置文件
    alias rr="echo 'reloading...'&&source ~/.zshrc"
    Copied!
  • 7、其他安装

  •  1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    
    # https://nodejs.org/en/
    brew install node
    # https://npmmirror.com 阿里镜像源 
    npm install -g cnpm --registry=https://registry.npmmirror.com
    # https://github.com/bchatard/alfred-jetbrains alfred流
    npm install -g @bchatard/alfred-jetbrains
    # https://picgo.github.io/PicGo-Core-Doc/zh/guide/ 图片上传
    npm install picgo -g
    # https://tldr.sh  替代man
    npm install -g tldr
    # https://github.com/wting/autojump  j跳转
    brew install autojump
    # https://github.com/sharkdp/bat  替代cat
    brew install bat
    # https://github.com/aristocratos/bpytop 替代top
    brew install bpytop
    # https://github.com/bcicen/ctop  容器资源利用情况
    brew install ctop
    # https://github.com/muesli/duf  磁盘空间
    brew install duf
    # https://github.com/nicolargo/glances  服务 代替top
    brew install glances
    # https://github.com/hishamhm/htop 代替top
    brew install htop
    # https://github.com/jenv/jenv java版本管理
    brew install jenv
    jenv doctor
    jenv versions
    jenv local 11.0.2
    # https://github.com/Peltoche/lsd 代替ls
    brew install lsd
    # lsof
    brew install lsof
    # nginx
    brew install nginx
    # https://github.com/tmux/tmux
    brew install tmux
    # tree
    brew install tree
    # 文件搜索 https://github.com/ggreer/the_silver_searcher 
    # ag -g filename ./
    brew install the_silver_searcher
    # https://github.com/junegunn/fzf 文件查询
    # 可以用来查找任何 列表 内容,文件、Git 分支、进程等 预览
    # fzf、ctrl+T:显示下拉列表; ctrl+R:显示历史命令; ctrl+g:回到首行;cd \ <TAB>:模糊匹配
    brew install fzf
    # 文件名搜索 https://github.com/sharkdp/fd
    brew install fd
    # markdown https://github.com/charmbracelet/glow
    brew install glow
    # https://github.com/skywind3000/z.lua
    # clone z.lua 到 ~/Data/Software/z.lua
    
    brew install trash #rm 废纸篓
    Copied!
  • 8、自定义函数 ~/Data/Config/my-functions目录下

    • getproxy

    • 1
      2
      3
      
      echo "http=$http_proxy;https=$https_proxy;all=$all_proxy"
      echo "HTTP=$HTTP_PROXY;HTTPS=$HTTPS_PROXY;ALL=$ALL_PROXY"
      echo "gh=$(git config --get http.proxy);ghs=$(git config --get https.proxy);"
      Copied!
    • setproxy

    •  1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      
      if [ "$1" != "git" ] && [ "$1" != "ssh" ] && [ "$1" != "all" ] ; then 
          echo 输入不符合要求
      fi
      if [ "$1" = "git" ] || [ "$1" = "all" ]; then 
          echo "set git proxy ......"
          git config --global http.proxy socks5://127.0.0.1:7890
          git config --global https.proxy socks5://127.0.0.1:7890
      fi
      if [ "$1" = "ssh" ] || [ "$1" = "all" ]; then 
          echo "set ssh proxy ......"
          export https_proxy=http://127.0.0.1:7890 
          export http_proxy=http://127.0.0.1:7890 
          export all_proxy=socks5://127.0.0.1:7890
          export HTTPS_PROXY=http://127.0.0.1:7890
          export HTTP_PROXY=http://127.0.0.1:7890
          export ALL_PROXY=socks5://127.0.0.1:7890
      fi
      Copied!
    • unproxy

    •  1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      
      if [ "$1" != "git" ] && [ "$1" != "ssh" ] && [ "$1" != "all" ] ; then
          echo 输入不符合要求
      fi
      if [ "$1" = "git" ] || [ "$1" = "all" ]; then
          echo "unset git proxy ......"
          git config --global --unset http.proxy socks5://127.0.0.1:7890
          git config --global --unset https.proxy socks5://127.0.0.1:7890
      fi
      if [ "$1" = "ssh" ] || [ "$1" = "all" ]; then
          echo "unset ssh proxy ......"
          unset https_proxy
          unset http_proxy
          unset all_proxy
          unset HTTPS_PROXY
          unset HTTP_PROXY
          unset ALL_PROXY
      fi
      Copied!
Licensed under CC BY-NC-SA 4.0
最后更新于 2024年5月24日 16:57
发表了90篇文章 · 总计613.28k字
本站总访问量本站访客数人次

目录