使用者工具

網站工具


editor:vim

差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

兩邊的前次修訂版前次修改
下次修改
前次修改
editor:vim [2010/01/07 21:08] – wenpeieditor:vim [2016/01/02 00:07] (目前版本) – sars
行 82: 行 82:
 |  :r <name>  |插入指定檔案的內容| |  :r <name>  |插入指定檔案的內容|
 |  :n  |下個檔案| |  :n  |下個檔案|
 +
 +====== Insert Mode ======
 +===== 自動補齊 =====
 +http://www.openfoundry.org/index.php?option=com_content&task=view&id=2215&Itemid=334
 +
 +|  C-x C-l  |行補齊|
 +|  C-x C-n  |以目前檔案做關鍵字補齊|
  
 ====== tabs ====== ====== tabs ======
行 122: 行 129:
 另一種,會出現分割視窗。 另一種,會出現分割視窗。
   :TOhtml   :TOhtml
 +
 +===== 清除 html tag =====
 +  %s/<\_[^>]*>//g
  
 ====== 在文件前加上行號 ====== ====== 在文件前加上行號 ======
行 131: 行 141:
  
 ====== Plugins ====== ====== Plugins ======
 +===== Vundle =====
 +https://github.com/VundleVim/Vundle.vim
 +
 +管理外掛的工具
 +
 +===== vimagit =====
 +https://github.com/jreybert/vimagit
 +
 +和 git 結合方便操作 git
 +
 ===== snipMate ===== ===== snipMate =====
 http://www.vim.org/scripts/script.php?script_id=2540 http://www.vim.org/scripts/script.php?script_id=2540
行 155: 行 175:
  
 http://ctags.sourceforge.net/ http://ctags.sourceforge.net/
 +
 +===== nerd tree =====
 +http://www.catonmat.net/blog/vim-plugins-nerdtree-vim/
 +
 +Allows you to explore the file system and open files and directories directly from vim.
  
 ====== Reference ====== ====== Reference ======
 Vim Cookbook:http://www.oualline.com/vim-cook.html Vim Cookbook:http://www.oualline.com/vim-cook.html
  
-===== COSCUP 2009 by c9s ===== +COSCUP 2009 by c9s:http://www.slideshare.net/c9s/vim-hacks 
-http://www.slideshare.net/c9s/vim-hacks+ 
 +Vim Hacks (OSSF) by c9s:http://www.slideshare.net/c9s/vim-hacks-ossf 
 + 
 +===== vimrc ===== 
 +http://amix.dk/vim/vimrc.html 
 + 
 +<code> 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" Maintainer: amix the lucky stiff 
 +"             http://amix.dk - [email protected] 
 +" 
 +" Version: 3.3 - 21/01/10 01:05:46 
 +" 
 +" Blog_post:  
 +"       http://amix.dk/blog/post/19486#The-ultimate-vim-configuration-vimrc 
 +" Syntax_highlighted: 
 +"       http://amix.dk/vim/vimrc.html 
 +" Raw_version:  
 +"       http://amix.dk/vim/vimrc.txt 
 +" 
 +" How_to_Install: 
 +"    $ mkdir ~/.vim_runtime 
 +"    $ svn co svn://orangoo.com/vim ~/.vim_runtime 
 +"    $ cat ~/.vim_runtime/install.sh 
 +"    $ sh ~/.vim_runtime/install.sh <system> 
 +"      <sytem> can be `mac`, `linux` or `windows` 
 +" 
 +" How_to_Upgrade: 
 +"    $ svn update ~/.vim_runtime 
 +" 
 +" Sections: 
 +"    -> General 
 +"    -> VIM user interface 
 +"    -> Colors and Fonts 
 +"    -> Files and backups 
 +"    -> Text, tab and indent related 
 +"    -> Visual mode related 
 +"    -> Command mode related 
 +"    -> Moving around, tabs and buffers 
 +"    -> Statusline 
 +"    -> Parenthesis/bracket expanding 
 +"    -> General Abbrevs 
 +"    -> Editing mappings 
 +" 
 +"    -> Cope 
 +"    -> Minibuffer plugin 
 +"    -> Omni complete functions 
 +"    -> Python section 
 +"    -> JavaScript section 
 +" 
 +" Plugins_Included: 
 +"     > minibufexpl.vim - http://www.vim.org/scripts/script.php?script_id=159 
 +"       Makes it easy to get an overview of buffers: 
 +"           info -> :e ~/.vim_runtime/plugin/minibufexpl.vim 
 +" 
 +"     > bufexplorer - http://www.vim.org/scripts/script.php?script_id=42 
 +"       Makes it easy to switch between buffers: 
 +"           info -> :help bufExplorer 
 +" 
 +"     > yankring.vim - http://www.vim.org/scripts/script.php?script_id=1234 
 +"       Emacs's killring, useful when using the clipboard: 
 +"           info -> :help yankring 
 +" 
 +"     > surround.vim - http://www.vim.org/scripts/script.php?script_id=1697 
 +"       Makes it easy to work with surrounding text: 
 +"           info -> :help surround 
 +" 
 +"     > snipMate.vim - http://www.vim.org/scripts/script.php?script_id=2540 
 +"       Snippets for many languages (similar to TextMate's): 
 +"           info -> :help snipMate 
 +" 
 +"     > fuzzyfinder - http://www.vim.org/scripts/script.php?script_id=1984 
 +"       Find files fast (similar to TextMate's feature): 
 +"           info -> :help fuzzyfinder@en 
 +" 
 +"  Revisions: 
 +"     > 3.3: Added syntax highlighting for Mako mako.vim  
 +"     > 3.2: Turned on python_highlight_all for better syntax 
 +"            highlighting for Python 
 +"     > 3.1: Added revisions ;) and bufexplorer.vim 
 +" 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => General 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" Sets how many lines of history VIM has to remember 
 +set history=300 
 + 
 +" Enable filetype plugin 
 +filetype plugin on 
 +filetype indent on 
 + 
 +" Set to auto read when a file is changed from the outside 
 +set autoread 
 + 
 +" With a map leader it's possible to do extra key combinations 
 +" like <leader>w saves the current file 
 +let mapleader = "," 
 +let g:mapleader = "," 
 + 
 +" Fast saving 
 +nmap <leader>w :w!<cr> 
 + 
 +" Fast editing of the .vimrc 
 +map <leader>e :e! ~/.vim_runtime/vimrc<cr> 
 + 
 +" When vimrc is edited, reload it 
 +autocmd! bufwritepost vimrc source ~/.vim_runtime/vimrc 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => VIM user interface 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" Set 7 lines to the curors - when moving vertical.. 
 +set so=7 
 + 
 +set wildmenu "Turn on WiLd menu 
 + 
 +set ruler "Always show current position 
 + 
 +set cmdheight=2 "The commandbar height 
 + 
 +set hid "Change buffer - without saving 
 + 
 +" Set backspace config 
 +set backspace=eol,start,indent 
 +set whichwrap+=<,>,h,l 
 + 
 +set ignorecase "Ignore case when searching 
 + 
 +set hlsearch "Highlight search things 
 + 
 +set incsearch "Make search act like search in modern browsers 
 + 
 +set magic "Set magic on, for regular expressions 
 + 
 +set showmatch "Show matching bracets when text indicator is over them 
 +set mat=2 "How many tenths of a second to blink 
 + 
 +" No sound on errors 
 +set noerrorbells 
 +set novisualbell 
 +set t_vb= 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Colors and Fonts 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +syntax enable "Enable syntax hl 
 + 
 +" Set font according to system 
 +if MySys() == "mac" 
 +  set gfn=Bitstream\ Vera\ Sans\ Mono:h13 
 +  set shell=/bin/bash 
 +elseif MySys() == "windows" 
 +  set gfn=Bitstream\ Vera\ Sans\ Mono:h10 
 +elseif MySys() == "linux" 
 +  set gfn=Monospace\ 10 
 +  set shell=/bin/bash 
 +endif 
 + 
 +if has("gui_running") 
 +  set guioptions-=T 
 +  set background=dark 
 +  set t_Co=256 
 +  set background=dark 
 +  colorscheme peaksea 
 + 
 +  set nu 
 +else 
 +  colorscheme zellner 
 +  set background=dark 
 +   
 +  set nonu 
 +endif 
 + 
 +set encoding=utf8 
 +try 
 +    lang en_US 
 +catch 
 +endtry 
 + 
 +set ffs=unix,dos,mac "Default file types 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Files and backups 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" Turn backup off, since most stuff is in SVN, git anyway... 
 +set nobackup 
 +set nowb 
 +set noswapfile 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Text, tab and indent related 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +set expandtab 
 +set shiftwidth=4 
 +set tabstop=4 
 +set smarttab 
 + 
 +set lbr 
 +set tw=500 
 + 
 +set ai "Auto indent 
 +set si "Smart indet 
 +set wrap "Wrap lines 
 + 
 +map <leader>t2 :setlocal shiftwidth=2<cr> 
 +map <leader>t4 :setlocal shiftwidth=4<cr> 
 +map <leader>t8 :setlocal shiftwidth=4<cr> 
 + 
 + 
 +"""""""""""""""""""""""""""""" 
 +" => Visual mode related 
 +"""""""""""""""""""""""""""""" 
 +" Really useful! 
 +"  In visual mode when you press * or # to search for the current selection 
 +vnoremap <silent> * :call VisualSearch('f')<CR> 
 +vnoremap <silent> # :call VisualSearch('b')<CR> 
 + 
 +" When you press gv you vimgrep after the selected text 
 +vnoremap <silent> gv :call VisualSearch('gv')<CR> 
 +map <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left> 
 + 
 + 
 +function! CmdLine(str) 
 +    exe "menu Foo.Bar :" . a:str 
 +    emenu Foo.Bar 
 +    unmenu Foo 
 +endfunction  
 + 
 +" From an idea by Michael Naumann 
 +function! VisualSearch(direction) range 
 +    let l:saved_reg = @" 
 +    execute "normal! vgvy" 
 + 
 +    let l:pattern = escape(@", '\\/.*$^~[]') 
 +    let l:pattern = substitute(l:pattern, "\n$", "", "") 
 + 
 +    if a:direction == 'b' 
 +        execute "normal ?" . l:pattern . "^M" 
 +    elseif a:direction == 'gv' 
 +        call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.') 
 +    elseif a:direction == 'f' 
 +        execute "normal /" . l:pattern . "^M" 
 +    endif 
 + 
 +    let @/ = l:pattern 
 +    let @" = l:saved_reg 
 +endfunction 
 + 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Command mode related 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" Smart mappings on the command line 
 +cno $h e ~/ 
 +cno $d e ~/Desktop/ 
 +cno $j e ./ 
 +cno $c e <C-\>eCurrentFileDir("e")<cr> 
 + 
 +" $q is super useful when browsing on the command line 
 +cno $q <C-\>eDeleteTillSlash()<cr> 
 + 
 +" Bash like keys for the command line 
 +cnoremap <C-A> <Home> 
 +cnoremap <C-E> <End> 
 +cnoremap <C-K> <C-U> 
 + 
 +cnoremap <C-P> <Up> 
 +cnoremap <C-N> <Down> 
 + 
 +" Useful on some European keyboards 
 +map 翻 $ 
 +imap 翻 $ 
 +vmap 翻 $ 
 +cmap 翻 $ 
 + 
 + 
 +func! Cwd() 
 +  let cwd = getcwd() 
 +  return "e " . cwd  
 +endfunc 
 + 
 +func! DeleteTillSlash() 
 +  let g:cmd = getcmdline() 
 +  if MySys() == "linux" || MySys() == "mac" 
 +    let g:cmd_edited = substitute(g:cmd, "\\(.*\[/\]\\).*", "\\1", "") 
 +  else 
 +    let g:cmd_edited = substitute(g:cmd, "\\(.*\[\\\\]\\).*", "\\1", "") 
 +  endif 
 +  if g:cmd == g:cmd_edited 
 +    if MySys() == "linux" || MySys() == "mac" 
 +      let g:cmd_edited = substitute(g:cmd, "\\(.*\[/\]\\).*/", "\\1", "") 
 +    else 
 +      let g:cmd_edited = substitute(g:cmd, "\\(.*\[\\\\\]\\).*\[\\\\\]", "\\1", "") 
 +    endif 
 +  endif    
 +  return g:cmd_edited 
 +endfunc 
 + 
 +func! CurrentFileDir(cmd) 
 +  return a:cmd . " " . expand("%:p:h") . "/" 
 +endfunc 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Moving around, tabs and buffers 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" Map space to / (search) and c-space to ? (backgwards search) 
 +map <space> / 
 +map <c-space> ? 
 +map <silent> <leader><cr> :noh<cr> 
 + 
 +" Smart way to move btw. windows 
 +map <C-j> <C-W>j 
 +map <C-k> <C-W>k 
 +map <C-h> <C-W>h 
 +map <C-l> <C-W>l 
 + 
 +" Close the current buffer 
 +map <leader>bd :Bclose<cr> 
 + 
 +" Close all the buffers 
 +map <leader>ba :1,300 bd!<cr> 
 + 
 +" Use the arrows to something usefull 
 +map <right> :bn<cr> 
 +map <left> :bp<cr> 
 + 
 +" Tab configuration 
 +map <leader>tn :tabnew %<cr> 
 +map <leader>te :tabedit  
 +map <leader>tc :tabclose<cr> 
 +map <leader>tm :tabmove  
 + 
 +" When pressing <leader>cd switch to the directory of the open buffer 
 +map <leader>cd :cd %:p:h<cr> 
 + 
 + 
 +command! Bclose call <SID>BufcloseCloseIt() 
 +function! <SID>BufcloseCloseIt() 
 +   let l:currentBufNum = bufnr("%") 
 +   let l:alternateBufNum = bufnr("#") 
 + 
 +   if buflisted(l:alternateBufNum) 
 +     buffer # 
 +   else 
 +     bnext 
 +   endif 
 + 
 +   if bufnr("%") == l:currentBufNum 
 +     new 
 +   endif 
 + 
 +   if buflisted(l:currentBufNum) 
 +     execute("bdelete! ".l:currentBufNum) 
 +   endif 
 +endfunction 
 + 
 +" Specify the behavior when switching between buffers  
 +try 
 +  set switchbuf=usetab 
 +  set stal=2 
 +catch 
 +endtry 
 + 
 + 
 +"""""""""""""""""""""""""""""" 
 +" => Statusline 
 +"""""""""""""""""""""""""""""" 
 +" Always hide the statusline 
 +set laststatus=2 
 + 
 +" Format the statusline 
 +set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{CurDir()}%h\ \ \ Line:\ %l/%L:%c 
 + 
 + 
 +function! CurDir() 
 +    let curdir = substitute(getcwd(), '/Users/amir/', "~/", "g") 
 +    return curdir 
 +endfunction 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Parenthesis/bracket expanding 
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +vnoremap $1 <esc>`>a)<esc>`<i(<esc> 
 +vnoremap $2 <esc>`>a]<esc>`<i[<esc> 
 +vnoremap $3 <esc>`>a}<esc>`<i{<esc> 
 +vnoremap $$ <esc>`>a"<esc>`<i"<esc> 
 +vnoremap $q <esc>`>a'<esc>`<i'<esc> 
 +vnoremap $e <esc>`>a"<esc>`<i"<esc> 
 + 
 +" Map auto complete of (, ", ', [ 
 +inoremap $1 ()<esc>i 
 +inoremap $2 []<esc>i 
 +inoremap $3 {}<esc>i 
 +inoremap $4 {<esc>o}<esc>O 
 +inoremap $q ''<esc>i 
 +inoremap $e ""<esc>i 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => General Abbrevs 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +iab xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr> 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Editing mappings 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +"Remap VIM 0 
 +map 0 ^ 
 + 
 +"Move a line of text using ALT+[jk] or Comamnd+[jk] on mac 
 +nmap <M-j> mz:m+<cr>`z 
 +nmap <M-k> mz:m-2<cr>`z 
 +vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z 
 +vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z 
 + 
 +if MySys() == "mac" 
 +  nmap <D-j> <M-j> 
 +  nmap <D-k> <M-k> 
 +  vmap <D-j> <M-j> 
 +  vmap <D-k> <M-k> 
 +endif 
 + 
 +"Delete trailing white space, useful for Python ;) 
 +func! DeleteTrailingWS() 
 +  exe "normal mz" 
 +  %s/\s\+$//ge 
 +  exe "normal `z" 
 +endfunc 
 +autocmd BufWrite *.py :call DeleteTrailingWS() 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Cope 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" Do :help cope if you are unsure what cope is. It's super useful! 
 +map <leader>cc :botright cope<cr> 
 +map <leader>n :cn<cr> 
 +map <leader>p :cp<cr> 
 + 
 + 
 +"""""""""""""""""""""""""""""" 
 +" => bufExplorer plugin 
 +"""""""""""""""""""""""""""""" 
 +let g:bufExplorerDefaultHelp=0 
 +let g:bufExplorerShowRelativePath=1 
 + 
 + 
 +"""""""""""""""""""""""""""""" 
 +" => Minibuffer plugin 
 +"""""""""""""""""""""""""""""" 
 +let g:miniBufExplModSelTarget = 1 
 +let g:miniBufExplorerMoreThanOne = 2 
 +let g:miniBufExplModSelTarget = 0 
 +let g:miniBufExplUseSingleClick = 1 
 +let g:miniBufExplMapWindowNavVim = 1 
 +let g:miniBufExplVSplit = 25 
 +let g:miniBufExplSplitBelow=1 
 + 
 +let g:bufExplorerSortBy = "name" 
 + 
 +autocmd BufRead,BufNew :call UMiniBufExplorer 
 + 
 +map <leader>u :TMiniBufExplorer<cr>:TMiniBufExplorer<cr> 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Omni complete functions 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +autocmd FileType css set omnifunc=csscomplete#CompleteCSS 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => Spell checking 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +"Pressing ,ss will toggle and untoggle spell checking 
 +map <leader>ss :setlocal spell!<cr> 
 + 
 +"Shortcuts using <leader> 
 +map <leader>sn ]s 
 +map <leader>sp [s 
 +map <leader>sa zg 
 +map <leader>s? z= 
 + 
 + 
 +"""""""""""""""""""""""""""""" 
 +" => Python section 
 +"""""""""""""""""""""""""""""" 
 +au FileType python set nocindent 
 +let python_highlight_all = 1 
 +au FileType python syn keyword pythonDecorator True None False self 
 + 
 +au BufNewFile,BufRead *.jinja set syntax=htmljinja 
 +au BufNewFile,BufRead *.mako set ft=mako 
 + 
 +au FileType python inoremap <buffer> $r return  
 +au FileType python inoremap <buffer> $i import  
 +au FileType python inoremap <buffer> $p print  
 +au FileType python inoremap <buffer> $f #--- PH ----------------------------------------------<esc>FP2xi 
 +au FileType python map <buffer> <leader>1 /class  
 +au FileType python map <buffer> <leader>2 /def  
 +au FileType python map <buffer> <leader>C ?class  
 +au FileType python map <buffer> <leader>D ?def  
 + 
 + 
 +"""""""""""""""""""""""""""""" 
 +" => JavaScript section 
 +""""""""""""""""""""""""""""""" 
 +au FileType javascript call JavaScriptFold() 
 +au FileType javascript setl fen 
 +au FileType javascript setl nocindent 
 + 
 +au FileType javascript imap <c-t> AJS.log();<esc>hi 
 +au FileType javascript imap <c-a> alert();<esc>hi 
 + 
 +au FileType javascript inoremap <buffer> $r return  
 +au FileType javascript inoremap <buffer> $f //--- PH ----------------------------------------------<esc>FP2xi 
 + 
 +function! JavaScriptFold()  
 +    setl foldmethod=syntax 
 +    setl foldlevelstart=1 
 +    syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend 
 + 
 +    function! FoldText() 
 +    return substitute(getline(v:foldstart), '{.*', '{...}', '') 
 +    endfunction 
 +    setl foldtext=FoldText() 
 +endfunction 
 + 
 + 
 +"""""""""""""""""""""""""""""" 
 +" => Fuzzy finder 
 +"""""""""""""""""""""""""""""" 
 +try 
 +    call fuf#defineLaunchCommand('FufCWD', 'file', 'fnamemodify(getcwd(), ''%:p:h'')') 
 +    map <leader>t :FufCWD **/<CR> 
 +catch 
 +endtry 
 + 
 + 
 +"""""""""""""""""""""""""""""" 
 +" => Vim grep 
 +"""""""""""""""""""""""""""""" 
 +let Grep_Skip_Dirs = 'RCS CVS SCCS .svn generated' 
 +set grepprg=/bin/grep\ -nH 
 + 
 + 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" => MISC 
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 +" Remove the Windows ^M - when the encodings gets messed up 
 +noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm 
 + 
 +"Quickly open a buffer for scripbble 
 +map <leader>q :e ~/buffer<cr> 
 +</code>
  
 ===== by 紅塵一隅間拾得 ===== ===== by 紅塵一隅間拾得 =====
行 299: 行 889:
  
 http://vrapper.sourceforge.net/home/ http://vrapper.sourceforge.net/home/
 +
 +====== VIM Color Scheme Test - Perl ======
 +http://vimcolorschemetest.googlecode.com/svn/html/index-pl.html
 +
editor/vim.1262869733.txt.gz · 上一次變更: 由 wenpei