vim 使用总结


在这里插入图片描述

基本操作

查看系统当前的 vim 是否支持剪贴板

在终端输入vim --version | grep clipboard命令,看到 clipboard 和 xterm_clipboard 前面都是减号 -,所以系统当前的 vim 不支持系统剪贴板。(加号 + 表示支持;减号 - 表示不支持)

-clipboard         +jumplist          +persistent_undo   +virtualedit
-ebcdic            -mouseshape        +statusline        -xterm_clipboard

快捷键

""""""""""""重要功能"""""""""""""""""""""

Ctrl+s 导致了冻屏,无法操作,可以使用 Ctrl + q 恢复
vim中查阅Man手册其实很方便,Shift+k键就成
mx	mark,添加标记 x,x 是 a~z 或者 A~Z 之间的任意一个字母
'x	直接定位到标记 x 所在位置
Ctrl + r 恢复(取消)之前的撤销操作【重做,redo
%	括号匹配及切换


"""""""""""""""""光标操作"""""""""""""""""""""""""""

i:在光标所在字符前开始插入
a:在光标所在字符后开始插入
o:在光标所在行的下面另起一新行插入
s:删除光标所在的字符并开始插入
I:在光标所在行的行首开始插入 如果行首有空格则在空格之后插入
A:在光标所在你行的行尾开始插入
O:在光标所在行的上面另起一行开始插入
S:删除光标所在行并开始插入
另外 u 撤销上一步的操作 Ctrl+r 恢复上一步被撤销的操作


w ,b,W,B,e,g,e 以单词为间隔移动光标
w是后移
b是向前
W是后移包含符号的单词
B是前移包含符号的单词
e 移动到单词的尾部
ge 移动到上一个单词的尾部
f移动到本行下一个特定的字母活符号
F移动到本行前一个特定的字母
f和F光标在搜索的字母前,你也可以使用t和T,他的光标在搜索的字母之后
当你使用了f{character}之后,你可以用;向后重复查找,或者使用,向前重复查找

光标移动到首行的行首,按键:gg
光标移动到末行的行首,按键:G / [Shift + G 键]
数字gg 光标定位到数字对应行数的行首
数字G 光标定位到数字对应行数的行首

""""""""""""""""""""""窗口操作"""""""""""""""
<Ctrl-w>s  水平切分
<Ctrl-w>v 垂直切分
<Ctrl-w>c 关闭活动窗口
<Ctrl-w>o 只保留活动窗口,关闭其他所有窗口
"切换窗口
<Ctrl-w>w 窗口间循环切换
<Ctrl-w>h 切换到左边窗口
<Ctrl-w>j
<Ctrl-w>k
<Ctrl-w>l
+		增加窗口高度
-		减少窗口高度
>		增加窗口宽度
<		减少窗口宽度
=		等分窗口大小

""""""""""""""""""""切换标签页"""""""""""""
:tabedit {filename} 打开新的窗口页
:tabc 关闭当前窗口页
:tabo 只保留当前窗口页
gt gT 分别是切换Tab
{N}gt 切换到编号为{N}的标签页。默认从1开始


""""""""""""""""""寄存器"""""""""""""""""""
:reg 显示所有寄存器的内容。
"":不加寄存器索引时,默认使用的寄存器。
"*:当前选择缓冲区,”*yy把当前行的内容放入当前选择缓冲区。
"+:系统剪贴板。”+yy把当前行的内容放入系统剪贴板。


基本配置

" 控制  
set nocompatible              "关闭vi兼容  
filetype off                  "关闭文件类型侦测,vundle需要  
set fileencodings=utf-8,gbk   "使用utf-8或gbk编码方式  
syntax on                     "语法高亮  
set backspace=2               "退格键正常模式  
set whichwrap=<,>,[,]         "当光标到行首或行尾,允许左右方向键换行  
set autoread                  "文件在vim外修改过,自动重载        
set nobackup                  "不使用备份  
set confirm                   "在处理未保存或只读文件时,弹出确认消息     
set scrolloff=3               "光标移动到距离顶部或底部开始滚到距离  
set history=1000              "历史记录数  

"set mouse=                    "关闭鼠标  
"set selection=inclusive       "选择包含最后一个字符  
"set selectmode=mouse,key      "启动选择模式的方式
set mouse=a                   "启用鼠标
set selection=exclusive
set selectmode=mouse,key

set completeopt=longest,menu  "智能补全,弹出菜单,无歧义时才自动填充  
set noswapfile                "关闭交换文件  
set hidden                    "允许在有未保存的修改时切换缓冲区  
  
"显示  
"colorscheme mycolor           "选择配色方案  
set t_Co=256                  "可以使用的颜色数目  
set number                    "显示行号
set cursorline                "突出显示当前行
set laststatus=2              "显示状态行  
set ruler                     "显示标尺  
set showcmd                   "显示输入的命令  
set showmatch                 "高亮括号匹配  
set matchtime=1               "匹配括号高亮的时间(十分之一秒)  
set matchpairs={:},(:)        "匹配括号"{}""()"   
set hlsearch                  "检索时高亮匹配项  
set incsearch                 "边检索边显示匹配  
set go-=T                     "去除gvim的toolbar  
  
"格式  
"set noexpandtab               "不要将tab转换为空格  
set shiftwidth=4              "自动缩进的距离,也是平移字符的距离  
set tabstop=4                 "tab键对应的空格数  
set autoindent                "自动缩进  
set smartindent               "智能缩进  


"===================按键映射======================  
  
"按键映射的起始字符  
let mapleader = '\'               
  
"使用Ctrl-l 和 Ctrl+h 切换标签页  
nnoremap <C-l> gt              
nnoremap <c-h> gT  
  
"在行末加上分号  
nnoremap <silent> <Leader>; :<Esc><End>a<Space>;<Esc><Down>  
"保存  
nnoremap <C-s> :w<CR>  
"替换  
nnoremap <C-h> :%s/<C-R>=expand("<cword>")<CR>/<C-R>=expand("<cword>")<CR> 


set laststatus=2            " 设置状态栏在倒数第2行
" 设置状态栏格式
"set statusline=%<%F%=%y%m%r%h%w%{&ff}\[%{&fenc}]0x%02B@%040h#%n\(%3l/%3L,%3c\|%3v\)%3p%%
set statusline=%1*\%<%.100F\             "显示文件名和文件路径 
set statusline+=%=%2*\%y%m%r%h%w\ %*        "显示文件类型及文件状态
set statusline+=%3*\%{&ff}\[%{&fenc}]\ %*   "显示文件编码类型
set statusline+=%4*\ row:%l/%L,col:%c\ %*   "显示光标所在行和列
set statusline+=%5*\%3p%%\%*    

基本语法

map

  1. map可以理解为快捷键,im有三种模式,normal,visual,insert,与此对应,nmap,vmap,imap就是在某一模式下的映射。

  2. noremap

noremap命令会使其在该map中失效

//由于映射双方都有dd,会无限循环。当执行完O<esc>j后又执行dd(即执行O<esc>jddk)
nmap dd O<esc>jddk  

leaders

leader就有点像win键,告诉vim:我要用快捷键了。事实上,我们不关心这个leader是什么,只是需要这么一个“前缀”.

  1. autocmd

自动命令,是在指定事件发生时自动执行的命令。利用自动命令可以将重复的手工操作自动化,以提高编辑效率并减少人为操作的差错。

  1. tab

tab标签快捷键

:tabnew [++opt选项] [+cmd] 文件            建立对指定文件新的tab
:tabc       关闭当前的tab
:tabo       关闭所有其他的tab
:tabs       查看所有打开的tab
:tabp      前一个
:tabn      后一个
标准模式下:gt , gT 可以直接在tab之间切换。

let mapleader = ","  设置leader,把逗号设置为mapleader
nnoremap <leader>d dd  //只需要按下,d就等于执行了dd
  1. let g: let b: let l:

通过指令查看内部变量::help internal-variables

buffer-variable b: Local to the current buffer.
window-variable w: Local to the current window.
tabpage-variable t: Local to the current tab page.
global-variable g: Global.
local-variable l: Local to a function.
script-variable s: Local to a |:source|’ed Vim script.
function-argument a: Function argument (only inside a function).
vim-variable v: Global, predefined by Vim.

call

在脚本语句中使用 call 函数名(参数)
在vim命令中使用 :call 函数名(参数)

包管理器 bundle

  1. 下载并放置在~/.vim文件夹
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
  1. ~/.vimrc配置vundle插件

插件有三种类型,对于不同的插件,vundle自动管理和下载插件的时候,有不同的地址填写方法

  • Github上vim-scripts仓库的插件:只需要写出repos(仓库)名称
  • Github上非vim-scripts仓库的插件:需要写出"用户名/repos名"
  • 不在Github上的插件:需要写出git全路径

把下面文件内容填入~/.vimrc文件,相应的插件填入call vundle#begin()call vundle#end() " required之间。

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.

" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
" Plugin 'L9'

" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'

" git repos on your local machine (i.e. when working on your own plugin)
"Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
  1. 下载安装相应的插件
  • 下载使用 vim 打开文件并执行:PluginInstall
  • 安装:通过命令行直接安装 vim +PluginInstall +qall
  • 插件在仓库的子目录中格式:
Plugin '用户名/插件仓库名',{'rtp': '子目录'}     -- rtp: runtimepath
示例: Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}       范例插件在 sparkup/vim 目录下
  1. 移除不需要的插件
  • 编辑 .vimrc 文件移除的你要移除的插件所对应的plugin那一行。
  • 保存退出当前的 vim
  • 重新打开 vim ,输入命令 PlugClean

必备插件安装

配置文件如下

set nocompatible              " be iMproved, required
filetype off                  " required


" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.

" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
" Plugin 'L9'

" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
Plugin 'scrooloose/nerdtree'
Plugin 'Valloric/YouCompleteMe'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'

" Other visual enhancement
Plugin 'nathanaelkane/vim-indent-guides'
Plugin 'itchyny/vim-cursorword'
Plugin 'connorholyday/vim-snazzy'

" Markdown
Plugin 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install_sync() }, 'for' :['markdown', 'vim-plug'] }
Plugin 'dhruvasagar/vim-table-mode', { 'on': 'TableModeToggle' }
Plugin 'vimwiki/vimwiki'

Plugin 'majutsushi/tagbar'
Plugin 'vim-scripts/taglist.vim'

Plugin 'godlygeek/tabular'

Plugin 'scrooloose/nerdcommenter'


" git repos on your local machine (i.e. when working on your own plugin)
"Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line

""""""""""""""""""basic"""""""""""""""""""""""
" 控制  
set nocompatible              "关闭vi兼容  
filetype off                  "关闭文件类型侦测,vundle需要  
set fileencodings=utf-8,gbk   "使用utf-8或gbk编码方式  
syntax on                     "语法高亮  
set backspace=2               "退格键正常模式  
set whichwrap=<,>,[,]         "当光标到行首或行尾,允许左右方向键换行  
set autoread                  "文件在vim外修改过,自动重载        
set nobackup                  "不使用备份  
set confirm                   "在处理未保存或只读文件时,弹出确认消息     
set scrolloff=3               "光标移动到距离顶部或底部开始滚到距离  
set history=1000              "历史记录数  

"set mouse=                    "关闭鼠标  
"set selection=inclusive       "选择包含最后一个字符  
"set selectmode=mouse,key      "启动选择模式的方式
set mouse=a                   "启用鼠标
set selection=exclusive
set selectmode=mouse,key

set completeopt=longest,menu  "智能补全,弹出菜单,无歧义时才自动填充  
set noswapfile                "关闭交换文件  
set hidden                    "允许在有未保存的修改时切换缓冲区  
  
"显示  
"colorscheme mycolor           "选择配色方案  
set t_Co=256                  "可以使用的颜色数目  
set number                    "显示行号
set cursorline                "突出显示当前行
set laststatus=2              "显示状态行  
set ruler                     "显示标尺  
set showcmd                   "显示输入的命令  
set showmatch                 "高亮括号匹配  
set matchtime=1               "匹配括号高亮的时间(十分之一秒)  
set matchpairs={:},(:)        "匹配括号"{}""()"   
set hlsearch                  "检索时高亮匹配项  
set incsearch                 "边检索边显示匹配  
set go-=T                     "去除gvim的toolbar  
  
"格式  
"set noexpandtab               "不要将tab转换为空格  
set shiftwidth=4              "自动缩进的距离,也是平移字符的距离  
set tabstop=4                 "tab键对应的空格数  
set autoindent                "自动缩进  
set smartindent               "智能缩进  

"=================按键映射======================  
  
"按键映射的起始字符  
let mapleader = '\'               
  
"使用Ctrl-l 和 Ctrl+h 切换标签页  
nnoremap <C-l> gt              
nnoremap <c-h> gT  
  
"在行末加上分号  
nnoremap <silent> <Leader>; :<Esc><End>a<Space>;<Esc><Down>  
"保存  
nnoremap <C-s> :w<CR>  
"替换  
nnoremap <C-h> :%s/<C-R>=expand("<cword>")<CR>/<C-R>=expand("<cword>")<CR> 


""""""""""""""""""nerdtree""""""""""""""""""""
let NERDTreeHighlightCursorline = 1       " 高亮当前行
let NERDTreeShowLineNumbers     = 1       " 显示行号
" 忽略列表中的文件
let NERDTreeIgnore = [ '\.pyc$', '\.pyo$', '\.obj$', '\.o$', '\.egg$', '^\.git$', '^\.repo$', '^\.svn$', '^\.hg$' ]
" 启动 vim 时打开 NERDTree
"autocmd vimenter * NERDTree
" 当打开 VIM,没有指定文件时和打开一个目录时,打开 NERDTree
"autocmd StdinReadPre * let s:std_in = 1
"autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
"autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif
" 关闭 NERDTree,当没有文件打开的时候
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | end
 
" <leader>nt 打开 nerdtree 窗口,在左侧栏显示
map <F2> :NERDTreeToggle<CR>
" <leader>tc 关闭当前的 tab
map <leader>tc :tabc<CR>
" <leader>to 关闭所有其他的 tab
map <leader>to :tabo<CR>
" <leader>ts 查看所有打开的 tab
map <leader>ts :tabs<CR>
" <leader>tp 前一个 tab
map <leader>tp :tabp<CR>
" <leader>tn 后一个 tab
map <leader>tn :tabn<CR>

 """"""""""""youcompleleme"""""""""""""""""""" 
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py' 
let g:ycm_min_num_of_chars_for_completion               = 2 " 输入第 2 个字符开始补全                  
let g:ycm_seed_identifiers_with_syntax                  = 1 " 语法关键字补全    
let g:ycm_complete_in_comments                          = 1 " 在注释中也可以补全    
let g:ycm_complete_in_strings                           = 1 " 在字符串输入中也能补全    
let g:ycm_collect_identifiers_from_tag_files            = 1 " 使用 ctags 生成的 tags 文件    
let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释和字符串中的文字也会被收入补全    
let g:ycm_cache_omnifunc                                = 0 " 每次重新生成匹配项,禁止缓存匹配项    
let g:ycm_use_ultisnips_completer                       = 0 " 不查询 ultisnips 提供的代码模板补全,如果需要,设置成 1 即可
let g:ycm_show_diagnostics_ui                           = 0 " 禁用语法检查
let g:ycm_key_list_select_completion   = ['<Down>']   " 选择下一条补全,Default: ['<TAB>', '<Down>']
let g:ycm_key_list_previous_completion = ['<Up>']     " 选择上一条补全,Default: ['<S-TAB>', '<Up>']
let g:ycm_key_list_stop_completion     = ['<Enter>']  " 中止此次补全,Default: ['<C-y>']   


"""""""""""""""""""vim-airline"""""""""""""""
let g:airline_powerline_fonts                   = 1 " 使用 powerline 打过补丁的字体
let g:airline#extensions#tabline#enabled        = 1 " 开启 tabline
let g:airline#extensions#tabline#buffer_nr_show = 1 " 显示 buffer 编号
let g:airline#extensions#ale#enabled            = 1 " enable ale integration
 
" 状态栏显示图标设置
if !exists('g:airline_symbols')
    let g:airline_symbols = {}
endif
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
let g:airline#extensions#tabline#formatter = 'default'
" 切换 buffer
nnoremap [b :bp<CR>
nnoremap ]b :bn<CR>
 
" 关闭当前 buffer
noremap <C-x> :w<CR>:bd<CR>
" <leader>1~9 切到 buffer1~9
map <leader>1 :b 1<CR>
map <leader>2 :b 2<CR>
map <leader>3 :b 3<CR>
map <leader>4 :b 4<CR>
map <leader>5 :b 5<CR>
map <leader>6 :b 6<CR>
map <leader>7 :b 7<CR>
map <leader>8 :b 8<CR>
map <leader>9 :b 9<CR>

"""""""""""""""im-indent-guide""""""""""""""""""""
let g:indent_guides_guide_size = 1
let g:indent_guides_start_level = 2
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_color_change_percent = 1
silent! unmap <LEADER>ig
autocmd WinEnter * silent! unmap <LEADER>ig

"""""""""""""""""snazzy""""""""""""""""""""""
let g:SnazzyTransparent = 1
color snazzy


""""""""""""""""MarkdownPreview"""""""""""""""""""""""""
let g:mkdp_auto_start = 0
let g:mkdp_auto_close = 1
let g:mkdp_refresh_slow = 0
let g:mkdp_command_for_global = 0
let g:mkdp_open_to_the_world = 0
let g:mkdp_open_ip = ''
let g:mkdp_browser = 'chromium'
let g:mkdp_echo_preview_url = 0
let g:mkdp_browserfunc = ''
let g:mkdp_preview_options = {
    \ 'mkit': {},
    \ 'katex': {},
    \ 'uml': {},
    \ 'maid': {},
    \ 'disable_sync_scroll': 0,
    \ 'sync_scroll_type': 'middle',
    \ 'hide_yaml_meta': 1
    \ }
let g:mkdp_markdown_css = ''
let g:mkdp_highlight_css = ''
let g:mkdp_port = ''
let g:mkdp_page_title = '「${name}」'

"""""""""""""""""""""tarbar""""""""""""
let g:tagbar_ctags_bin = 'ctags' " tagbar 依赖 ctags 插件
let g:tagbar_width     = 30      " 设置 tagbar 的宽度为 30 列,默认 40 列
let g:tagbar_autofocus = 1       " 打开 tagbar 时光标在 tagbar 页面内,默认在 vim 打开的文件内
let g:tagbar_left      = 1       " 让 tagbar 在页面左侧显示,默认右边
"let g:tagbar_sort      = 0       " 标签不排序,默认排序
 
" <leader>tb 打开 tagbar 窗口,在左侧栏显示
"map <leader>tb :TagbarToggle<CR>
map <F3> :TagbarToggle<CR>

""""""""""""tarlist"""""""""""""""
let Tlist_Show_One_File           = 1    " 只显示当前文件的tags
let Tlist_GainFocus_On_ToggleOpen = 1    " 打开 Tlist 窗口时,光标跳到 Tlist 窗口
let Tlist_Exit_OnlyWindow         = 1    " 如果 Tlist 窗口是最后一个窗口则退出 Vim
let Tlist_Use_Left_Window         = 1    " 在左侧窗口中显示
let Tlist_File_Fold_Auto_Close    = 1    " 自动折叠
let Tlist_Auto_Update             = 1    " 自动更新
 
" <leader>tl 打开 Tlist 窗口,在左侧栏显示
map <F4>tl :TlistToggle<CR>


""""""""""""'scrooloose/nerdcommenter'
let g:NERDSpaceDelims            = 1                                    " 在注释符号后加一个空格
let g:NERDCompactSexyComs        = 1                                    " 紧凑排布多行注释
let g:NERDDefaultAlign           = 'left'                               " 逐行注释左对齐
let g:NERDAltDelims_java         = 1                                    " JAVA 语言使用默认的注释符号
let g:NERDCustomDelimiters       = {'c': {'left': '/*', 'right': '*/'}} " C 语言注释符号
let g:NERDCommentEmptyLines      = 1                                    " 允许空行注释
let g:NERDTrimTrailingWhitespace = 1                                    " 取消注释时删除行尾空格
let g:NERDToggleCheckAllLines    = 1                                    " 检查选中的行操作是否成功

参考文献

  1. [VIM] VIM 实用插件整理
  2. VIM学习笔记
  3. vimrc-example/vimrc
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值