【问题标题】:Simple Vim commands you wish you'd known earlier [closed]您希望早点知道的简单 Vim 命令 [关闭]
【发布时间】:2021-11-18 09:07:01
【问题描述】:

我一直在学习 Vim 中的新命令,但我相信每个人都会偶尔学习一些新东西。我最近才知道这一点:

zz、zt、zb - 将光标定位在屏幕的中间、顶部或底部

还有哪些其他有用或优雅的命令您希望在很久以前就学会了?

【问题讨论】:

  • 从技术上讲,zz、zt、zb 将光标定位在屏幕的中间/顶部/底部。要将 光标 定位在中间/顶部/底部,请使用 M、H 或 L。这两组命令都很有用!
  • 几个月或一年前阅读这篇文章对我每天都有帮助。多亏了这篇文章,我用 dap 每小时移动段落多次。
  • 我从来没有从一个被标记为非建设性的页面中学到这么多技巧:) 谢谢大家。

标签: vim


【解决方案1】:

我真希望我知道您可以使用 Ctrl+C 而不是 Esc 来退出插入模式。这对我来说是一个真正的生产力提升。

【讨论】:

  • 我将 Caps-Lock 重新映射到 Esc。这比普通的 Esc 和 Ctrl-C 都容易
  • 天哪。 15 年的 vi,我从来不知道这一点......
  • 另一个流行的是将'jj'用于ESC。到目前为止,我喜欢这种方法。 :地图! jj
  • 你也可以使用 CTRL-[ (我喜欢它,因为它是两个小手指......只是双手稍微旋转一下)。
  • 使用“jk”作为@claytron 的变体。如果您在不知不觉中已经处于 INSERT 模式,jk 会将您留在原来的位置,因此您可以随时点击它(信用:其他人......不是我的想法)。
【解决方案2】:

我最近学到的“哇”技巧是一种进行复杂搜索和替换的方法。在过去,我经常有一个非常复杂的正则表达式来进行替换,但它不起作用。有更好的办法:

:set incsearch             " I have this in .vimrc
/my complicated regexp     " Highlighted as you enter characters
:%s//replace with this/    " You don't have to type it again

这里的“技巧”(因为需要更好的词)是您可以使用搜索来创建正则表达式(并且“incsearch”在您输入字符时突出显示它)然后在替换中使用空模式的方式: 空模式默认为最后一个搜索模式。

例子:

/blue\(\d\+\)
:%s//red\1/

相当于:

:%s/blue\(\d\+\)/red\1/

见:

:help 'incsearch'
:help :substitute

【讨论】:

  • 哇...我一直在寻找这样的东西
  • 是的,我希望我早点知道这件事。但话又说回来,这就是我所说的关于我在 vim 中学到的所有新知识。
  • 对于真正喜欢此功能的任何人,请尝试点击<Ctrl-R>/ 以插入最后一个搜索查询。 (见:help i_CTRL-R)确实有用,类似于上面,但是你想捕获部分搜索结果。 (像这样:%s:/\\([fF]rank\\) and mary/marie and \1/g
  • :%s//... 也适用于*(在光标下搜索单词)。一个名为 visual-star-search 的插件扩展了* 的功能以匹配视觉选择的整个文本,这使得搜索和替换所选文本变得容易,例如v3e(视觉选择 3 个词)*(搜索)和:%s//replacement/g(用“替换”替换所有出现)。我经常使用它,所以我有一个全局替换命令的映射::nmap <Leader>s :%s///g<left><left>
  • @idbrii 因为阅读的人可能是 Vim 菜鸟(我),%s: 应该是 :%s,对于我的系统,我需要 \(\) 而不是 \\(\\)
【解决方案3】:

我为我的一个朋友创建了这个我最常用的命令的参考:

select                                   v
select row(s)                            SHIFT + v
select blocks (columns)                  CTRL  + v
indent selected text                     >
unindent selected text                   <
list buffers                             :ls
open buffer                              :bN (N = buffer number)
print                                    :hardcopy
open a file                              :e /path/to/file.txt
                                         :e C:\Path\To\File.txt
sort selected rows                       :sort
search for word under cursor             *
open file under cursor                   gf
  (absolute path or relative)
format selected code                     =
select contents of entire file           ggVG
convert selected text to uppercase       U
convert selected text to lowercase       u
invert case of selected text             ~
convert tabs to spaces                   :retab
start recording a macro                  qX (X = key to assign macro to)
stop recording a macro                   q
playback macro                           @X (X = key macro was assigned to)
replay previously played macro *         @@
auto-complete a word you are typing **   CTRL + n
bookmark current place in file           mX (X = key to assign bookmark to)
jump to bookmark                         `X (X = key bookmark was assigned to
                                             ` = back tick/tilde key)
show all bookmarks                       :marks
delete a bookmark                        :delm X (X = key bookmark to delete)
delete all bookmarks                     :delm!
split screen horizontally                :split
split screen vertically                  :vsplit
navigating split screens                 CTRL + w + j = move down a screen
                                         CTRL + w + k = move up a screen
                                         CTRL + w + h = move left a screen
                                         CTRL + w + l = move right a screen
close all other split screens            :only

*  - As with other commands in vi, you can playback a macro any number of times.
     The following command would playback the macro assigned to the key `w' 100
     times: 100@w

** - Vim uses words that exist in your current buffer and any other buffer you may have open for auto-complete suggestions.

【讨论】:

  • 您列出“~X”以使用名为 X 的标记。这对我不起作用 - 而我使用“'X”(单引号)。
  • 哇。你完全正确。当我输入指南时,我猜我的眼睛只看到了波浪号并掩盖了后面的勾号。我会相应地更新。感谢您的提醒。
  • 这个列表很好,但我很想知道你是怎么画这个表的?与 VIM?哪个插件?我正在寻找一个。
  • 我使用了 VIM,但没有插件。然而;使用选择块功能使其相对容易。很高兴您发现该列表很有用! 〜布莱恩
  • Ctrl-Q 用于块选择是 mswin.vim 的一个特性,它允许 CTRL-V 粘贴。大多数 vim 用户会认为这是邪恶的并禁用 mswin.vim。 "+P 或 Ctrl-R + 输入剪贴板内容并不难。
【解决方案4】:

gi 切换到插入模式,将光标置于之前的相同位置。

【讨论】:

  • 当我发现g; 时我非常高兴,现在这让我感动落泪:-)
  • @longdeqidao 一点也不。它返回到最后一个插入点。因此,您可以随意滚动,它会将您拉回到上次插入的位置。
  • 仅供参考,g; (上面提到的@PatrickOscity)将光标放在进行编辑的位置。您可以多次使用它来回顾历史。在这里注意到这一点是因为我的 vim 帮助出于某种奇怪的原因没有提到这一点。
  • Vim 的直观性从未停止给我留下深刻印象。由于@PonyEars 提到了g;,我尝试了它的“对立面”是否是g,,你瞧,我们可以前后移动!
  • a 更短。 :) 但是gi 确实非常直观,g 通常是相反的操作。
【解决方案5】:
:q!

我希望在我第一次开始 vi 之前就知道这一点。

【讨论】:

  • 作为一个 emacs 人,这是我读过的最有趣的评论。不确定你是不是故意的。你今天让我很开心。
  • 我记得在同一天第一次尝试vim和emacs,也不知道如何退出。我心想这些人到底怎么了!?
  • +1。第一次启动 vim 时,默认信息应该是“write :q to quit”。我会节省很多时间哈哈
  • @JoséRamón 但如果您在不打开文件的情况下输入 vim,它确实默认显示在屏幕上。这是最近添加的吗?我清楚地记得几年前尝试过 vim,它已经在那里了。如果您尝试退出而不保存缓冲区,它还会告诉您使用:q!
  • @ivy_lynx 是的,你可能是对的,但前提是你打开没有文件的 vim。通常你第一次打开vim是因为你需要在Unix中编辑一个config文件,所以你写了“$ vim file”就找不到出路了。还是只有我一个?
【解决方案6】:

^X-F 使用当前目录中的文件名完成。不再需要从终端复制/粘贴或痛苦的双重检查。

^X-P完成使用当前文件中的单词

:set scrollbind 强制一个缓冲区与另一个缓冲区一起滚动。例如将您的窗口分成两个垂直窗格。在每个文件中加载一个文件(可能是同一文件的不同版本)。每个都做:set scrollbind。现在,当您滚动其中一个时,两个窗格 将一起滚动。比较文件的理想选择。

【讨论】:

  • 启用后如何禁用滚动绑定?
  • jinxed_coder:set noscb 将其关闭并使用 :set scb 将其打开(而不是 :scrollbind)。 :h scrollbind
  • 哎呀。更正了 ':set scrollbind'。
  • ^X-P 优先于文件中的前一个词完成,^X-N 优先于文件中的下一个词。
  • 您还可以通过打开 file1 并运行 :diffsplit file2 或仅使用 vim -d file1 file2 启动 vim 来区分文件。 Vim 自动滚动绑定这两个文件。
【解决方案7】:

您可以使用一整套命令来更改括号/括号/引号/标签内的文本。避免必须找到组的开始和结束非常有用。根据您要更改的对象类型,尝试ci(, ci{, ci&lt;, ci", ci', ctca(, ca{, ... 变体也删除了括号/引号。

容易记住:在括号内更改/更改括号内的语句。

【讨论】:

  • 这不仅适用于c。您可以使用d 删除(例如,di( 或 da(),y 拉动,v 选择等)。
  • 您好!我想知道这方面的文档使用:help?我在任何地方都找不到它。 >_
  • @Peter 我以前检查过这些,但找不到提到特殊的“内部 + 分隔符”行为。原来是在:help motion.txt!谢谢!
  • 这个技巧是我首先切换到 vi 的唯一原因 :)
  • 如果您正在编辑 HTML 或 XML,您可以使用 cit 更改当前标签的内容。例如在&lt;span&gt;Some text&lt;/span&gt;,如果你的光标在“m”上,你可以用dit得到&lt;span&gt;&lt;/span&gt;
【解决方案8】:

星号键 * 将搜索光标下的单词。

[+Tab 将带您到光标下的 C 函数的定义。 (但它并不总是有效。)

【讨论】:

  • 如果您使用 *nix 来学习如何生成“标签”文件,请尝试 'man ctags',该文件告诉 vim 如何查找除 C 之外的许多语言中的任何函数或变量的定义. 使用 ctrl+] 查找光标下标记的定义,或使用 :tag tokenToFind 查找它知道的任何标记。您甚至可以使用 "vim -t tokenToFind" 启动 vim 以打开相应的文件并将光标定位在您需要编辑的函数处。
  • #键将反向搜索光标下的单词
  • github.com/bronson/vim-visual-star-search 启用星形搜索以进行视觉选择。我不想再错过了。
  • [ + Tab 将始终在您使用 set path+=path/to/files 等所需文件夹扩展 path 时工作
  • 如何在没有导航的情况下打开搜索? * 前进; # 倒退;我想突出显示并留在原地。
【解决方案9】:
  1. 永远不要按 EscSee this answer to learn why。如上所述,Ctrl + C 是更好的选择。我强烈建议您将 Caps Lock 键映射为转义。

  2. 如果您正在编辑Ctags 兼容的语言,使用标签文件和:taCtrl + ] 等非常棒导航代码的方式,甚至跨多个文件。此外,使用标签文件的 Ctrl + NCtrl + P 补全是减少击键。

  3. 如果您正在编辑因比缓冲区宽而被换行的行,您可以使用 gk 和 gj 向上/向下移动。

  4. 在养成不良习惯之前,请尝试专注于有效使用运动命令。诸如使用 'dt' 或 'd3w' 而不是多次按 x 之类的东西。基本上,每当您发现自己反复按下同一个键时,可能有更好/更快/更简洁的方法来完成相同的事情。

【讨论】:

  • 不使用 Escape?那是异端。 Escape 是您最好的朋友,无论是在工作中还是在工作中。
  • 这么好的朋友,为什么在键盘上那么远?
  • 因为 99% 的人从不使用它。
  • Escape 在我的键盘上与其他键相隔几英寸。你不能错过它。
  • #3 太棒了!仍在学习新事物...
【解决方案10】:

我在 Vim 脑库中添加的一些最新内容:

  • ^wi:拆分窗口跳转到光标下的标签。
  • cib/ciB:分别更改当前组括号 () 或大括号 {} 内的文本。
  • :set listchars=tab:&gt;-,trail:_ list:显示制表符/尾随空格在视觉上与其他空格不同。它对 Python 编码有很大帮助。

【讨论】:

  • 这需要更多的投票! cib 很棒。
  • also: ciw 更改当前单词(或 caw,相同但仅限左手) ciW 更改当前 W=o.(r-d) 与 v 相同而不是 c 将在视觉中选择替换
  • cib 相当于输入 "ci("。你也可以输入 "ci[", "ci{", 或者 (如果你的 vimrc 设置正确的话) "ci
  • 另外,“cit”可以更改标签内的文本。在使用 XML/HTML 时非常有用。
  • 还值得一提的是,如果您愿意,您可以使用右大括号代替后缀。另外,我刚刚了解了ci}cit - 哇,这将是非常有用的。 vi[m] 正在证明一个非常令人兴奋的计划!
【解决方案11】:

ZZ(类似于:wq

关于光标位置:我发现始终停留在屏幕中间的光标很酷-

set scrolloff=9999

【讨论】:

  • 不知道。 :x 也这样做
  • 不完全准确。像:x 一样工作,它只在有更改时保存文件,而:wq 总是保存文件。
  • ZQ(像 :q!)
【解决方案12】:

gv 启动视觉模式并自动选择您之前选择的内容。

【讨论】:

    【解决方案13】:

    :shell 从 Vim 启动 shell 控制台。例如,当您想在不退出 Vim 的情况下测试脚本时很有用。完成 shell 控制台后,只需点击 ^d,然后返回 Vim 和您编辑的文件。

    【讨论】:

    • 我猜:!sh 太难了。我更喜欢这样,因为使用当前缓冲区中的寄存器/完成来编写命令行更容易,例如使用%/%:h 作为当前文件名/目录名等。
    • 这个很酷。我每天都在使用它。在此之前它是,:wq,做 cli 的东西,用同一个文件重新打开 vim。。很好的优化
    • Ctrl-Z 切换到 shell 和 fg 回到 vim。
    • map &lt;Esc&gt;! :shell&lt;CR&gt; 放入您的.vimrc,然后您可以使用Alt+! 或Alt+Shift+1 启动shell。 (助记符::!{cmd} 使用 shell 执行 {cmd}。)
    • :shell 将启动一个新的嵌套 shell 级别。而ctrl-z 没有。
    【解决方案14】:

    这总是让我振作起来:

    :help 42
    

    【讨论】:

      【解决方案15】:

      vim加密

      vim -x 文件名.txt

      系统会要求您输入密码,然后进行编辑并保存。现在,每当您再次在 vi 中打开文件时,您都必须输入密码才能查看。

      【讨论】:

      • 将此与您的保管箱同步,您将获得一个非常好的密码管理器;-)
      • 但请注意,除非您 set cryptmethod=blowfish(仅在 7.3+ 中可用),否则它将使用具有可笑强度的算法。有关详细信息,请参阅help encryption
      • 请不要使用vim加密,不是好的加密,不好的安全总比没有差。更多信息:github.com/neovim/neovim/issues/694
      • dgl.cx/2014/10/vim-blowfish meta-tldr: "已在 Vim 7.4.399 中修复 [groups.google.com/forum/#!msg/vim_dev/D8FyRd0EwlE/bkBOo-hzTzoJ],出于向后兼容的原因,它需要是一个新的加密方法,所以请使用 :set cm=blowfish2"
      【解决方案16】:

      在 Vim 中构建和调试您的代码!

      配置

      不多,真的。您需要在当前目录中有一个Makefile

      编译

      当您在 Vim 中时,输入 :make 以调用 shell 并构建您的程序。当输出滚动时不要担心;完成后只需按 Enter 即可返回 Vim。

      魔法

      回到 Vim 中,您可以使用以下命令:

      1. :cl 列出错误、警告和其他消息。
      2. :cc 在屏幕底部显示当前错误/警告消息,并跳到代码中的违规行
      3. :cc n 跳转到nth 消息。
      4. :cn 前进到下一条消息。
      5. :cp 跳转到上一条消息。

      还有更多;如果您有兴趣,请在 Vim 中输入 :help :cc

      【讨论】:

      • 不仅仅用于编译代码。也就是说,任何写在 makefile 中的任务都非常有用。
      【解决方案17】:

      当光标位于引号、括号、方括号或大括号上时,按 % 以查找其匹配项。

      【讨论】:

      • 如果光标不在其中任何一个上,它会向右移动,直到碰到其中一个。
      • @Léo:感谢您的奖金提示!
      • 我刚试了一下,好像默认留在你里面了。尝试一下:如果光标在点上,则: () 或 . --(--(----)--->) 或者如果您位于所有大括号 ( ) 的右侧,则不会发生任何事情。
      【解决方案18】:

      ^P 和 ^N

      完成上一个 (^P) 或下一个 (^N) 文本。

      ^O 和 ^I

      转到上一个(^O - “O”表示旧)位置或下一个(^I - “I”就在“O”附近)。

      当您执行搜索、编辑文件等操作时,您可以在这些“跳转”中前后导航。

      标记

      ma(m- 标记,a - 标记名称)。稍后返回该位置,键入 `a

      【讨论】:

      • 哇,我不知道 ^O 和 ^I:太棒了。如果有人想了解更多信息,可能值得在您的答案中包含:help jump-motions 等。
      • 查看 ShowMarks vim.org/scripts/script.php?script_id=152 。它将帮助您记住所有标记在缓冲区中的位置和内容。您可以使用 \mt 打开和关闭可视化
      • 我不明白 ^P 和 ^N 之间的区别...
      • @lajarre 他们以相反的方向循环浏览可用完成列表
      • 我经常在打开 Vim 时使用 ^O^O,因为我注意到我想再次编辑上次编辑的文件。节省大量时间!
      【解决方案19】:

      ^r^w 在命令模式下粘贴光标下的单词。

      在使用 grep 或 replace 命令时非常有用。

      【讨论】:

      • 如果它是你想要的唯一单词,那么 * 在正常模式下会搜索光标下的单词。
      【解决方案20】:

      直到 [字符] (t)。它对于任何接受范围的命令都很有用。我最喜欢的是ct;ct),它会删除尾随分号/右括号之前的所有内容,然后将您置于插入模式。

      另外,Ggg 也很有用(分别转到底部和顶部)。

      【讨论】:

      • 这里最好的一个,虽然其他一些也很有用,但我已经全部了解了
      • 还有f而不是t,这将[动作]向上通过该角色;例如,将光标放在函数参数的开头,df, 将删除它(当然,在合适的语言中)。
      • t 和 f 非常适合编辑 camelCase 变量的一部分。例如,如果您只是复制了一行并且需要将 firstVariable 更改为 secondVariable,请将光标放在 firstVariable 的开头,然后 ctV
      • T 和 F 也可以,但方向相反。
      【解决方案21】:

      ^y 将复制光标上方的字符。

      【讨论】:

      • ... 和 ^E 将在光标下方插入字符
      • 对我不起作用,它只是将光标移动到文本的开头
      • @Alex 这是在插入模式下使用的
      【解决方案22】:

      键入行号,后跟gg 将带您到该行。

      【讨论】:

      • : 后跟行号也一样:42 转到第 42 行
      • 在 G 之后键入行号具有相同的效果。
      • &lt;number&gt;go 转到文件中的&lt;number&gt;th 字符。
      【解决方案23】:

      我希望我早点知道基本的视觉块模式的东西。即使您不将 Vim 用于其他任何事情,在 Vim 中打开文件只是为了进行一些块操作也可以节省大量时间。我很确定我在手动做这种事情上浪费了大量时间。

      我发现特别有用的示例,例如,一致地重构符号常量名称列表:

      进入可视块模式(我在 Windows 上是 Ctrl + Q 而不是 Ctrl + V

      移动光标以突出显示所需的块。

      然后,I whatever text 并按 Esc 将文本插入到每一行的块前面。

      使用A 而不是I 在每一行的块之后插入文本。

      另外 - 只需使用 ~ 切换视觉选择的大小写即可节省大量时间。

      当然也可以简单地删除列,d

      【讨论】:

        【解决方案24】:

        q - 记录一个宏。

        @ - 播放它。

        这些是迄今为止 Vim 中最有用的命令,因为您可以让计算机为您完成大量工作,而您甚至不必编写程序或任何东西。

        【讨论】:

        • q 的使用简化了事情,但您不需要使用它:只需将缓冲区命令 " 保存到命名缓冲区中 - 例如,使用缓冲区 a - @ 987654324@ ...
        • @Mei q 录制宏;宏可以包含命令,而不仅仅是文本,因此 "ad$qa 不同。
        • @Sortofabeginner 这在这里无关紧要。命令 "ad$ 将文本放入缓冲区 a 并且 qa 运行它。
        • @Mei qa 不运行它; qa 记录它,@a 运行它。的确,您可以用纯文本编写宏,将其存储在寄存器a 中,使用"ad$ 之类的东西,然后使用@a 执行它,但这需要更多的工作。剪切粘贴与记录运行之间存在根本区别。
        • 噢!我知道。感谢指正
        【解决方案25】:

        使用标签打开多个文件

        :tabe filepath
        

        在打开的文件之间导航

        gt and gT or :tabn and :tabp
        

        保存打开的会话,以便稍后返回打开的文件列表

        :mksession session_file_name.vim
        

        打开创建的会话

        vim -S session_file_name.vim
        

        一次性关闭所有文件

        :qa
        

        我最近学到的另一个命令

        autocmd
        

        它允许您在事件上运行命令,因此您可以在保存文件时运行命令 make,例如:

        :autocmd BufWritePost *.cpp :make
        

        【讨论】:

          【解决方案26】:

          qx 将开始记录击键。你几乎可以做任何编辑任务,而且 Vim 会记住它。完成后再次按 q,然后按 @x 重播您的击键。这对于过于复杂而无法为其编写映射的重复编辑非常有用。您可以使用 x 以外的字符进行多次录制。

          【讨论】:

          • 同样的字符 'x' 在 'q' 记录宏命令和命名的剪贴板 ("x...) 之间共享。您可以在文件周围留下宏的 sn-ps 和将它们复制到命名的剪贴板(例如“xyy”),然后播放它们(@x)。
          • 如果你曾经创建了 awesomist 宏,你可以使用 'let @x = ""' 将该剪贴板粘贴到你的 _vimrc 中(将宏放在 "" 中)并永久保存!
          【解决方案27】:

          我不得不说我最喜欢的是将帮助窗口放在一个新标签中:

          :tab help <help_topic>
          

          这会在新选项卡中打开帮助,对于喜欢 Vim 选项卡的人来说,这非常有用。

          【讨论】:

          • 缓冲区是 vim 的选项卡。 vim 工作流程更好地支持它们。我怀疑标签只是添加到 vim 中,因为太多人不了解缓冲区。
          • 好吧,说了这么多,我发现了 vim 中制表符的用途。确实,如果每个选项卡使用一个缓冲区,则需要了解缓冲区。这不是在 vim 中使用制表符的方式。大多数高级 vim 用户使用缓冲区的方式与大多数程序中使用选项卡的方式相同。许多人认为选项卡应该在 vim 中命名为布局。它们主要用于在不同的选项卡中打开不同的窗口集合。您还可以在一个选项卡中打开一个特定的缓冲区,然后使用另一个选项卡查看所有其他缓冲区。
          【解决方案28】:
          :x #(Save and Quit a File)
          

          与 :wq 或 ZZ 相同

          【讨论】:

          • 对于那些太喜欢:wq的人来说,我用:command! Wq :wq&lt;CR&gt;来处理我不能足够快地离开我的shift键的讨厌的情况。
          【解决方案29】:

          顺时针

          更改单词 - 删除光标下的单词并让您进入插入模式以键入新单词。当然,这适用于其他移动键,因此您可以执行 c$ 之类的操作来更改到行尾。

          f + 字符

          查找当前行中字符的下一个匹配项。因此,您可以执行 vft 来选择当前行上直到下一个“t”的所有文本。它是另一个移动键,因此它也适用于其他命令。

          【讨论】:

            【解决方案30】:

            :b [any portion of a buffer name] 切换缓冲区。因此,如果您有两个缓冲区,“somefile1.txt”和“someotherfile2.txt”,您可以简单地使用":b 2.t&lt;enter&gt;" 切换到第二个缓冲区。它还支持制表符补全,虽然不是必需的。

            说到tab补全,设置:set wildmode=full wildmenu也很有帮助。它支持命令模式的完整选项卡完成,以及使用它时所有可能匹配项的非常有用的 ncurses 样式菜单。

            【讨论】:

              猜你喜欢
              • 2011-03-22
              • 2015-04-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-10-13
              相关资源
              最近更新 更多