日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

vim入門,進(jìn)階與折騰

 orion360doc 2014-04-19

vim入門,進(jìn)階與折騰

做為編輯器之神,vim一直是我編輯文本的不二選擇,哪怕其坎坷的學(xué)習(xí)曲線讓人頭疼不已.末學(xué)總結(jié)一下經(jīng)驗(yàn)教訓(xùn),以作備忘.

入門

個(gè)人習(xí)慣編譯選項(xiàng)

./configure -with-features=huge -enable-cscope -enable-fontset -enable-multibyte -enable-perlinterp -enable-rubyinterp -enable-pythoninterp

工作目錄

:pw[d] 顯示當(dāng)前工作目錄
:cd[!] {path} 工作目錄切換到path

移動(dòng): h j k l 0 ^ $ e E b B w W f F t T ; , % gg G [ ]
編輯: d y p r c o

在vim中還存在如x,s等編輯命令,這些命令只是 編輯命令 + 移動(dòng)命令 的簡(jiǎn)答組合,如x X D C s S Y

簡(jiǎn)單總結(jié)大小寫操作命令的區(qū)別:

作用于行首: I
作用于行尾: D,C,A,R
作用于整行: Y,S,V
作用于逆方向: X,F,P,O,N
搜索時(shí)大小寫相關(guān): \C
改變大小寫: gU

關(guān)于編輯命令,需要說明一點(diǎn): x,d,c這些命令會(huì)把臟數(shù)據(jù)置入vim的粘貼板(所謂臟數(shù)據(jù),也就是被命令刪除或改變的那部分?jǐn)?shù)據(jù)).

利用vim的這個(gè)特性,我們可以輕易的實(shí)現(xiàn)文本剪切,如交換兩個(gè)字符,交換兩行文本,甚至是交換兩段文本:

16進(jìn)制編輯,碼農(nóng)必備,lol

:%!xxd 16進(jìn)制編輯
:%!xxd -r 文本編輯

保存會(huì)話

Session可以忠實(shí)地記錄vim當(dāng)前的視圖,如windows和tabs,甚至是高亮.真是誰用誰知道.

:mks[!] [file] 把當(dāng)前視圖保存到file,如file未指定,則缺省為Session.vim
vim -S Session.vim 打開Session.vim,也就是Reload view,重新打開視圖.

可視化編輯

v: charwise
V: linewise

Ctrl-V: blockwise,后文介紹.

gv 重選上次選中的區(qū)域,誰用誰知道

區(qū)域

% 作用于當(dāng)前打開的整個(gè)文件
‘<,'> 作用于當(dāng)前選中的區(qū)域,其中,’<表示選中區(qū)域第一行,'>表示選中區(qū)域的最后一行.
{num1},{num2} 作用于從第num1行到第num2行

內(nèi)置命令

. 當(dāng)前行,比如說,想要作用于從當(dāng)前行開始的總共8行文本,則可以8:,
$ 最后一行,

:[range] substitute/from/to/[flags] 替換文本

:[range] copy {num1} {num2} 復(fù)制文本

:[range] Tabluarize /{char1} 對(duì)齊文本

甚至可以是:
:[range] TOhtml 文本轉(zhuǎn)為html

查找: / ? * #

:help pattern

/ 向前查找keyword
向后查找keyword

n 重做最后一次/或?
N 反方向重做最后一次/或?

\c 查找時(shí)忽略大小寫
\C 查找時(shí)大小寫相關(guān)

\< 表示一個(gè)詞的開始
\> 表示一個(gè)詞的結(jié)束

tabs

:help tabpage

:tabnew 新建tab
:tabclose 關(guān)閉當(dāng)前tab
:tabedit {file} 新建tab,并在新創(chuàng)建的tab打開file (等價(jià)于: tabnew后:edit {file})
:tabmove {idx} 把當(dāng)前tab移動(dòng)到第idx tab之后

gt 切換到下一tab
gT 切換到上一tab
{idx}gt 切換到第idx tab

為了方便,我的vimrc配置如下:

536 map <A-1> 1gt
537 map <A-2> 2gt
538 map <A-3> 3gt
539 map <A-4> 4gt
540 map <A-5> 5gt
541 map <A-6> 6gt
542 map <A-7> 7gt
543 map <A-8> 8gt
544 map <A-9> 9gt

盡管很dirty,好歹能工作.

windows

:sp {file} 橫向(horizontally)切割窗口,并在新窗口打開file
:vsp {file} 豎向(vertically)切割窗口,并在新窗口打開file

h 切換到左側(cè)窗口
j 切換到下方窗口
k 切換到上方窗口
l 切換到右側(cè)窗口

如果對(duì)所有vimer的配置做統(tǒng)計(jì),下面這段配置絕對(duì)是出現(xiàn)頻率最高的:

577 map <C-h> <C-w>h
578 map <C-j> <C-w>j
579 map <C-k> <C-w>k
580 map <C-l> <C-w>l

省下的絕對(duì)不僅是一次w按鍵,vimer你懂的.

關(guān)于窗口的擴(kuò)大縮小, :help window-resize

marks

:help marks

我用得最多的marks操作是:

‘[ 跳到上一次被改變(changed)或者復(fù)制的文本段的第一個(gè)字符
'' 跳回上一次跳轉(zhuǎn)的地方
'^ 跳到插入模式最后一次結(jié)束的地方
'. 跳到上一次文本被修改的地方

縮進(jìn)與對(duì)齊

:help indent.txt

> 向右縮進(jìn)shiftwidth個(gè)字符大小
< 同上,但是向左縮進(jìn)
= 對(duì)齊文本

>,<.=這三個(gè)命令的作用域既可以是選中的一段文本,也可以是一個(gè)文本對(duì)象(后文進(jìn)階部門會(huì)解釋).

進(jìn)階

[N]<command> 執(zhí)行<command>N次

NOTE: [N]<command><range>和<command>[N]<range>是不一樣的,如:d3w和3dw兩個(gè)操作雖然看似一樣,但實(shí)際上它們?cè)趘im內(nèi)部的行為是有本質(zhì)區(qū)別的:
d3w表示一次刪除3個(gè)w,而3dw表示一次刪除一個(gè)w,重復(fù)3次.

[start pos]<command>[end pos] 從start pos開始執(zhí)行<command>到end pos,[]表示其內(nèi)部的命令不是必須的,也就是說,start pos和end pos都不是必須的.

gg=G和^y$是兩個(gè)極好的例子:

gg=G 對(duì)齊整個(gè)文件(gg跳到第一行,=對(duì)齊,G最后一行)
^y$ 從當(dāng)前行行首復(fù)制至行尾(^行首,y復(fù)制,$行尾),你能看出^y$和Y的區(qū)別嗎?

NOTE: start pos和end pos僅僅表示一個(gè)位置(黑話叫錨點(diǎn)),至于如何從光標(biāo)移動(dòng)到start pos或者end pos,vim并沒有做出要求.于是,我們可以輕松地敲出如下命令,大大提高文本編輯的效率:

df=, yf=, cf=, vf= 從當(dāng)前字符開始刪除(復(fù)制,改變,選中),直到遇到=之后
dt”, yt”, ct”, vt” 從當(dāng)前字符開始刪除(復(fù)制,改變,選中),直到遇到”之前

text object

:help text-objects

<action>i<object> 作用于對(duì)象內(nèi)部(i: inner)
<action>a<object> 作用于整個(gè)對(duì)象(a: an)

其中,action可以是v,d,c,y,甚至可以是>,<等
而object可以是w,W,s,p,b,B,以及各種成對(duì)符號(hào),如',",<,{,(,[等

有了文本對(duì)象,寫起代碼來更是得心應(yīng)手,如:

向右縮進(jìn)一段代碼: >i{
刪除(復(fù)制,改變,選中)光標(biāo)所在單詞: diw, yiw, ciw, viw
刪除(復(fù)制,改變,選中)”"內(nèi)所有文本: di”, yi”, ci”, vi”
刪除(復(fù)制,改變,選中)”"號(hào)內(nèi)所有文本,包括引號(hào)本身: da”, ya”, ca”, va”

visual block

${select region}<commands>

塊操作可以一次編輯多行文本,對(duì)有規(guī)律的編輯需要實(shí)在是一大利器.如:

所謂宏,就是一段錄制好的操作.

q${register}<commands>q 錄制commands到寄存器register
[N]@register 重放寄存器register中的宏N次

看起來,宏和塊操作的區(qū)別非常明顯: 宏“可以認(rèn)為”是linewise,而塊操作是blockwise,也就是說,宏對(duì)應(yīng)的是幾行文本,塊操作對(duì)應(yīng)的則是選中的block.

從這明顯的區(qū)別中我們可以推出一個(gè)重要的結(jié)論: 宏中的錨點(diǎn)有相對(duì)的概念,而塊操作是絕對(duì)的.比如說,行尾就是一個(gè)最簡(jiǎn)單的相對(duì)概念,每一行的行尾所在的錨點(diǎn)可能都不一樣,但這絲毫不影響宏正確的在所有行行尾插入一段文本.而在塊操作中,命令A(yù)(在行尾插入)對(duì)應(yīng)的語義卻變成了block的尾部,顯然,”block的尾部”這一概念對(duì)block中的所有行都是相同的,也就是所謂絕對(duì)的位置.

折騰

配色

:help syntax

vim自帶了許多配色方案(在這里有各種預(yù)覽),可以用colorscheme命令選擇,如: colorscheme desertEx

哪怕再性感的配色,看久了也會(huì)生煩,所幸vim自帶了synIDattr函數(shù),在vimrc中加入如下腳本:

215 nmap <C-S-P> :call <SID>SynStack()<CR>
216 function! <SID>SynStack()
217    if !exists("*synstack")
218       return
219    endif
220    echo map(synstack(line(‘.’), col(‘.’)), ‘synIDattr(v:val, "name")’)
221 endfunc

:so %安裝后就可以通過Ctrl-Shift-P組合鍵方便地查看某段文本的ID了.

得到文本ID之后,需要通過指定顏色來實(shí)現(xiàn)自定義.vim支持rgb配色(#445599之流),可是,身為毫無藝術(shù)感的二逼后臺(tái)開發(fā),我自然更偏愛skyblue這類見其名即可知其意的配色方案了:).為了讓生活容易些,可以:runtime syntax/colortest.vim直接預(yù)覽,誰用誰知道.

vim的強(qiáng)大總是讓人愛不釋手,我們甚至可以自定義ID,比如說,我的代碼中TODO橫行,為了更直觀的顯示TODO項(xiàng),于是便有了這段配置:

60 highlight RipGroup ctermbg=yellow cterm=none ctermfg=black
61 match RipGroup /TODO/

btw,在終端下切記要打開256色: set t_Co=256

再次btw,簡(jiǎn)單回答一個(gè)可以很好的區(qū)分vim新手和老鳥的問題,對(duì)Alt鍵的map為何在終端模式下如此虐心? 因?yàn)榻K端他媽的自動(dòng)在Alt前面加了Esc前綴,這該讓人多胸悶啊.

代碼折疊

:help fold.txt

vim支持多種折疊方法(fold methods),如indent,expr,marker,syntax等.我偏向于按syntax折疊,配置如下:

716 set foldenable           " enable folden
717 set foldmethod=syntax    " manual : Folds are created manually.
718                          " indent : Lines with equal indent form a fold.
719                          " expr   : ‘foldexpr’ gives the fold level of a line.
720                          " marker : Markers are used to specify folds.
721                          " syntax : Syntax highlighting items specify folds.
722                          " diff   : Fold text that is not changed.
728
729 "set foldclose=all
730 " use space to folden
731 nnoremap <space> @=((foldclosed(line(‘.’)) < 0) ? ‘zc’ : ‘zo’)<CR>

其中,.表示當(dāng)前行,zo表示展開,zc表示折疊,整行配置的意思就是通過空格鍵折疊代碼,效果如下:

vim默認(rèn)在搜索和undo時(shí)會(huì)展開你辛辛苦苦設(shè)置好的折疊,這是讓人非常難受的,所以我會(huì)追加這么一段配置:

726 set foldopen-=search     " dont open folds when I search into thm
727 set foldopen-=undo       " dont open folds when I undo stuff

編碼

249 set encoding=utf-8
250 set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,gbk,euc-jp,euc-kr,latin1
251 if has("win32")
252     set fileencoding=chinese
253     " fix menu gibberish
254     source $VIMRUNTIME/delmenu.vim
255     source $VIMRUNTIME/menu.vim
256     " fix console gibberish
257     language messages zh_CN.utf-8
258 else
259     set termencoding=utf-8
260     set fileencoding=utf-8
261 endif

gui設(shè)置

簡(jiǎn)單介紹一下gvim的設(shè)置,首先是字體,我的配置如下:

229 set guifont=Courier_New:h9:cANSI
231 set guifontwide=幼圓:h10:cGB2312

guifont對(duì)應(yīng)的應(yīng)為字體,guifontwide對(duì)應(yīng)所謂的寬字節(jié)字體,中文就是寬字節(jié).

我個(gè)人傾向于隱藏gvim菜單欄,工具欄,滾動(dòng)條等,以最大化代碼可視面積:

237 if has("gui_running")
238     " set guioptions-=m  " remove menu bar
239     set guioptions-=T  " remove toolbar
240     set guioptions-=r  " remove right-hand scroll bar
241     set guioptions-=l  " remove left-hand scroll bar
242     set guioptions-=L  " remove left-hand scroll bar even if there is a vertical split
243     set guioptions-=b  " remove bottom scroll bar
244 endif

我要吐槽的是,即便設(shè)置了set guioptions-=l,當(dāng)切割了橫向窗口時(shí),左側(cè)的滾動(dòng)條還是會(huì)如幽靈般出現(xiàn).各種不解后查了手冊(cè)才明白,原來還要set guioptions-=L,但是,右側(cè)滾動(dòng)條卻沒有這個(gè)坑,簡(jiǎn)直坑爹.

tags

:help tags

tags是什么,程序員都懂.通過ctags程序可以很方便的為C++/C項(xiàng)目生成tags:

ctags -R -c++-kinds=+p -fields=+iaS -extra=+q .

-c++-kinds=+p 生成函數(shù)原型,該選項(xiàng)默認(rèn)關(guān)閉.同樣默認(rèn)關(guān)閉的選項(xiàng)還有l(wèi)(局部變量)和x(外部變量).
-fileds=+iaS 分別對(duì)應(yīng)類的繼承inheritabce,類成員訪問權(quán)限(access)和routine簽名(Signature, 如原型或參數(shù)列表等).
-extra=+q 為類成員生成的tag加上其所屬的類信息.

這行命令敲起來太累了,不如按一下F5來的痛快:

492 map <F5> :!ctags -R -c++-kinds=+p -fields=+iaS -extra=+q .<CR>

該命令生成的文件為當(dāng)前目錄下的tags.

作為后臺(tái)開發(fā)程序員,查閱系統(tǒng)源碼是常有的事,不妨為/usr/include目錄生成tags,然后配置vimrc,以便每次啟動(dòng)vim時(shí)自動(dòng)加載(即便有再多的autoload,即便vim啟動(dòng)速度再慢,也足以秒殺emacs了…這算是降維攻擊不?):

274 if has("win32")
275     set tags+=E:\workspace\linux\tags  " tags for /usr/include/
276 else
277     set tags+=~/.vim/tags/include/tags " tags for /usr/include/
278 endif
279 set tags+=tags                         " tags for current project

需要說明的是,我偶爾需要在windows上寫代碼,所以我把linux下的/usr/include目錄拷貝到了windows上,然后用ctags windows版生成了tags,于是在windows上寫代碼也舒適了許多.

插件

vim什么都硬,只是有一點(diǎn)比較短: 擴(kuò)展性,vim在這一點(diǎn)被咖啡機(jī)emacs拉下遠(yuǎn)遠(yuǎn)不止一條街,但是對(duì)于普通青年我,卻也算是差強(qiáng)人意了.”Do one thing and do it well”,這恐怕是不少vim擁躉自我解脫的說辭.

下面是個(gè)人最喜歡的一些插件,排名不分先后:

Quickfix.vim

:help quickfix

Quickfix是vim的標(biāo)準(zhǔn)插件,它是一個(gè)典型的plumber: 只要輸入符合error format(efm),則vim可以正確理解和識(shí)別”錯(cuò)誤列表”,并跳轉(zhuǎn)到對(duì)應(yīng)行.

我們通過gcc和grep的輸出來更好地理解error format:

Error: Unclassifiable statement at hello-world.f90:9.4 gcc編譯器的錯(cuò)誤提示
./sys/net/bpf.c:137: bpf_wakeup __P((struct bpf_d *)); grep的輸出(加上-n)

可以看到,它們的格式是非常類似的.

雖然Quickfix插件原意是為了更方便地調(diào)試代碼,可是借用error format實(shí)現(xiàn)文本的匹配也是非常拉轟的:

505 " search word under cursor like source insight
506 " <cword> is replaced with the word under the cursor (like |star|) (:help cmdline or :help cword)
507 map <C-F> :execute "let g:word=expand(\"<cword>\")"<Bar>execute "vimgrep /\\<" . g:word ."\\>/g **/*.[ch] **/*.cpp"<Bar>execute "cc 1"<Bar>execute "cw"<CR>
508 " next matched line
509 map <silent> <F10> :cnext<CR>
510 " previous matched line
511 map <silent> <F11> :cprevious<CR>
512 " open QuickFix
513 " :copen
514 " close QuickFix
515 " :cclose

簡(jiǎn)單說明一下這段配置,表示當(dāng)前光標(biāo)下的單詞(:help cmdline or :help cword),也就是|,表示串聯(lián)命令.cc 1表示跳到”錯(cuò)誤列表”第一條,cw表示打開quickfix窗口,如果存在可識(shí)別的錯(cuò)誤列表.cnext和cprevious表示在錯(cuò)誤列表中切換.

btw,vim在匹配時(shí)默認(rèn)使用自帶的vimgrep插件,如果覺得不方便,可以顯示指定使用grep: set grepprg=grep

A.vim

A.vim插件可以方便地切換源文件和頭文件,還是那句話,誰用誰知道啊.

:A 在同一tab切換源文件/頭文件
:AV 豎向切割窗口,打開對(duì)應(yīng)的源文件/頭文件.
:AS 橫向切割窗口,打開對(duì)應(yīng)的源文件/頭文件.

NERDTree.vim

NERDTree插件可以清楚地展示目錄樹,而且支持許多快捷鍵.個(gè)人最喜歡的快捷鍵是t: 在新建的tab打開光標(biāo)所對(duì)應(yīng)的文件.可惜的是,NERDTree原版插件對(duì)所新建的tab的命名看起來沒什么具體的含義,于是我用上了二手版,配置如下:

378 map <F6> <plug>NERDTreeTabsToggle<CR>
379
380 let g:nerdtree_tabs_open_on_gui_startup=1     " Open NERDTree on gvim/macvim startup
381 let g:nerdtree_tabs_open_on_console_startup=1 " Open NERDTree on console vim startup
382 let g:nerdtree_tabs_open_on_new_tab=1         " Open NERDTree on new tab creation
383 let g:nerdtree_tabs_meaningful_tab_names=1    " Unfocus NERDTree when leaving a tab for descriptive tab names
384 let g:nerdtree_tabs_autoclose=1               " Close current tab if there is only one window in it and it’s NERDTree
385 let g:nerdtree_tabs_synchronize_view=1        " Synchronize view of all NERDTree windows (scroll and cursor position)
386
387 " When switching into a tab, make sure that focus is on the file window, not in the NERDTree window.
388 let g:nerdtree_tabs_focus_on_files=1

OmniCppCompelete.vim

OmniCppComplete借助于tags實(shí)現(xiàn)智能補(bǔ)全,Ctrl-X Ctrl-O彈出待選擇tags菜單,Ctrl-N切換至下一選項(xiàng),Ctrl-P切換至上一選項(xiàng).

個(gè)人配置如下:

318 " :help omnicppcomplete
319 set completeopt=longest,menu      " I really HATE the preview window!!!
320 let OmniCpp_NameSpaceSearch=1     " 0: namespaces disabled
321                                   " 1: search namespaces in the current buffer [default]
322                                   " 2: search namespaces in the current buffer and in included files
323 let OmniCpp_GlobalScopeSearch=1   " 0: disabled 1:enabled
324 let OmniCpp_ShowAccess=1          " 1: show access
325 let OmniCpp_ShowPrototypeInAbbr=1 " 1: display prototype in abbreviation
326 let OmniCpp_MayCompleteArrow=1    " autocomplete after ->
327 let OmniCpp_MayCompleteDot=1      " autocomplete after .
328 let OmniCpp_MayCompleteScope=1    " autocomplete after ::

在智能補(bǔ)全時(shí),OmniCppComplete會(huì)在當(dāng)前工作窗口上方橫向切割出一個(gè)preview窗口,preview窗口包含當(dāng)前待選項(xiàng)的各種說明.杯具的是,當(dāng)通過Ctrl-N或者Ctrl-P切換待選tags時(shí),該preview窗口將會(huì)隨著待選說明的變化而增大縮小,如果切換速度較快,則preview窗口看起來就像抖動(dòng)一般.這也讓人很難受,我們可以如下配置,關(guān)閉preview特性.

319 set completeopt=longest,menu      " I really HATE the preview window!!!

另外,不要被插件名字欺騙了,OmniCppCompelete同樣支持其他語言,如python,xml等.配置如下:

331 autocmd FileType python set omnifunc=pythoncomplete#Complete
332 autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
333 autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
334 autocmd FileType css set omnifunc=csscomplete#CompleteCSS
335 autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
336 autocmd FileType php set omnifunc=phpcomplete#CompletePHP
337 autocmd FileType c set omnifunc=ccomplete#Complete

關(guān)于autocmd,找manual: help autocmd

Supertab.vim

vim在插入模式下支持13種補(bǔ)全方式(:help ins-completion),普通青年記不住,于是有了Supertab插件,配置如下:

312 let g:SuperTabRetainCOmpletionType=2    " 2: remember last autocomplete type, unless I use ESC to exit insert mode
313 let g:SuperTabDefaultCompletionType="<C-X><C-O>"

Taglist.vim

該插件展示當(dāng)前文件對(duì)應(yīng)的tags列表.配置如下:

299 if has("win32")
300     let Tlist_Ctags_Cmd=‘ctags’             " set ctags path
301 else
302     let Tlist_Ctags_Cmd=‘~/ctags-5.8/ctags’ " set ctags path
303 endif
304 let Tlist_Show_One_File=1               " only show current file’s taglist
305 let Tlist_Exit_OnlyWindow=1             " if taglist is of the last windows, exit vim
306 let Tlist_Use_Right_Window=1            " show taglist at right
307 let Tlist_File_Fold_Auto_Close=1        " hide taglist if it’s not for current file

mark.vim

這是一款高亮插件.<leader>m高亮當(dāng)前光標(biāo)所對(duì)應(yīng)的單詞,再次<leader>m清除高亮.<leader>n清除所有高亮.

mark.vim默認(rèn)只有下面這6種高亮顏色.如果覺得太少,可以自由地在mark.vim中添加.

 68 " default colors/groups
 69 " you may define your own colors in you vimrc file, in the form as below:
 70 hi MarkWord1  ctermbg=Cyan     ctermfg=Black  guibg=#8CCBEA    guifg=Black
 71 hi MarkWord2  ctermbg=Green    ctermfg=Black  guibg=#A4E57E    guifg=Black
 72 hi MarkWord3  ctermbg=Yellow   ctermfg=Black  guibg=#FFDB72    guifg=Black
 73 hi MarkWord4  ctermbg=Red      ctermfg=Black  guibg=#FF7272    guifg=Black
 74 hi MarkWord5  ctermbg=Magenta  ctermfg=Black  guibg=#FFB3FF    guifg=Black
 75 hi MarkWord6  ctermbg=Blue     ctermfg=Black  guibg=#9999FF    guifg=Black

最后

推薦兩大暗爽已久的神器,一是vimperator,在firefox上高度仿真了vim.一是hhkb,其驚艷的鍵位布局徹底釋放了我被壓抑多時(shí)的小拇指(碼農(nóng)你懂的),而奢侈的電容鍵盤更讓人概嘆“RealForce的素質(zhì),那僅僅是HHKB的起點(diǎn)而已”.當(dāng)然,如果拿hhkb來碼中文,那就是另一回事了…

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多