cmd-line模式又有3个类型:Ex 命令(ex commands)、查找模式(Search patterns)、Filter 命令(Filter commands)。本文主要重点的是Ex 命令和Search patterns。Filter 命令暂时用的场景比较少,如果有更适合的场景再补充。

目的

掌握cmd-line模式下常用操作的语法和概念

Ex 命令简介

  初时,先有ed,ed为ex之父,ex为vi之父,而vi为vim之父。可见Ex 命令的重要性。

  在Ex 命令影响范围广且距离远。对比normal模式的文本操作,它适合在本地(或者说可以通过快捷键一次到达)进行操作。

  一般操作都是范围({range})+动作。

  Vim 为几乎所有功能都提供了相应的Ex 命令。下面简要列举几个

命令 用途
:[range]delete [x] 删除指定范围内的行[到寄存器x 中]
:[range]yank [x] 复制指定范围的行[到寄存器x 中]
:[line]put [x] 在指定行后粘贴寄存器x 中的内容
:[range]copy {address} 把指定范围内的行拷贝到{address} 所指定的行之下
:[range]move {address} 把指定范围内的行移动到{address} 所指定的行之下
:[range]join 连接指定范围内的行
:[range]normal {commands} 对指定范围内的每一行执行普通模式命令{commands}
:[range]global/{pattern}/[cmd] 对指定范围内匹配{pattern}的所有行,在其上执行Ex 命令{cmd}
:[range]substitute/{pattern}/{string}/[flags] 把指定范围内出现{pattern}的地方替换为{string}

  概念:

  • [range]指的是范围。下方会涉及到
  • [x] 表示的寄存器具名。即[a-zA-Z]
  • {address}表示的是地址。
  • {pattern}对应的是下面的模式
  • [cmd]表示动作
  • {string} 字符串
  • [flags] 标记
  • {commands}表示normal模式下的一系列操作

  想了解更多,参见:h ex-cmd-index。

移动光标

  在cmd-line模式下怎样更快捷的移动光标。一般是为了更正输入的错误。

  语法如下:

命令 用途
Ctrl+B 移动到命令的行首
Ctrl+E 移动到命令的末尾
Ctrl+<Left> 向左移动一个单词
Ctrl+<Right> 向右移动一个单词
<Left> 向左移动一个字符
<Right> 向右移动一个字符

删除

  移动的时候,一般只使用Ctrl+B,Ctrl+E。如果此时输错了,之前在insert模式也说过了,最好的办法是删除重输。所以这里介绍一下删除的快捷键

命令 用途
Ctrl+U 删除到行首
Ctrl+W 删除一个单词

快捷键映射

  如果还是更习惯移动光标,那可以把非主键区的按键映射成主键区的组合

  

  这个设置,大家可以根据自己的习惯来设置。我一般只设置单词移动,然后如果输错了直接删除重输。

历史记录

  查看命令的历史。

  

  查看历史记录的语法如下

命令 用途
Ctrl+P 上一条命令
Ctrl+N 下一条命令

命令窗口

  命令行窗口就像是一个常规的 Vim 缓冲区,只不过它的每行内容都对应着命令历史中的一个条目。我们可以用k 及j 键在历史中向前或向后移动(像另一个独立的操作窗口,可以使用正常的所有模式命令),也可以用 Vim 的查找功能查找某一行。在按下<CR> 键时,将会把当前行的内容当成Ex 命加以执行

  开启命令窗口语法

命令 用途
q/ 在normal模式打开查找命令历史的命令行窗口
q: 在normal模式打开 Ex 命令历史的命令行窗口
<Ctrl-f> 从cmd-line模式切换到命令行窗口

  例如

# 假设我们正在写一个简单的Ruby 脚本,然后发现每做出一个修改时,都会执行
# 下面两条命令:
# :write
# :!ruby %
# 在接连执行了几次这两条命令后,我们意识到可以简化工作过程,把这两条命令
# 合为一条。这样,以后就可以从历史中选择该完整命令并再次执行:
# :write | !ruby %
# 这些命令都已经在历史中了,所以我们不必从头输入整条命令。但要怎样才能把历史
# 中的两条记录合并成一条呢? # 执行下面的步骤即可
q:
k
J(Shift+j)
<CR>

自动补全

  补全的语法

命令 用途
tab 如同在shell 中一样,在命令行上也可以用<Tab> 键自动补全命令。
Shift+tab 要想反向遍历补全列表
Ctrl+D 命令会让Vim 显示可用的补全列表。这个在挺好用的。
Ctrl+A 补全所有匹配列表
ctrl+L 只有一个匹配的时候。暂时觉得用处不大
<C-r><C-w> 把当前单词插入到命令行
<C-r>{register} 可以把寄存器的内容插入到命令行

  例如

  

重复执行

  在normal模式重复上次的 Ex 命令非常简单,只需按@:。

  注意事项

  • : 寄存器总是保存着最后执行的命令行命令。在运行过一次@: 后,后面就可以用@@ 命令来重复它。

范围

  很多 Ex 命令可以用[range] 指定要操作的范围。我们可以用行号、位置标记或是查找模式来指定范围的开始位置及结束位置。

  在定义一个[range]时,它总是代表一系列连续行,不过:global 命令也可以在一系列非连续行上执行Ex 命令

用地址指定范围

  指的就是上面的{address}。

  地址类型如下

符号 地址
0 虚拟行,位于文件第一行上方。
n 文件的第n行
$ 文件的最后一行
. 光标所在的那一行
'm 包含位置标记m 的行
% 整个文件(:1,$ 的简写形式)

  注意事项:

  • 第0 行在文件中并不真实存在,但它作为一个地址,在某些特定场景下会很有用处。特别是,在把指定范围内的行复制或移动到文件开头时,可以用它做:copy{address} 及:move {address} 命令的最后一个参数。

  • 很多情况下不写[range]情况是默认当前行
  • :{start},{end}表示一个更广的范围。其中{start}和{end}都表示{address}。比如:.,$表示当前行到文件尾。

  特殊场景:

  • 如果输入一条只包含数字的Ex 命令,那么 Vim 会把这个数字解析成一个地址,并把光标移动到该数字所指定的行上。比如:3 跳到第3行。

  

用高亮选区指定范围

  当高亮选中后,按下:时,就会触发选定范围。此时在Ex 命令会显示":'<,'>"。

  '<,表示高亮选中的开头,'>表示高亮选中的结尾。

用模式指定范围

  Vim 也接受以模式作为一条 Ex 命令的地址。 :/{pattern1}/,/{pattern2}/。

  例如:

  

  这个范围看起来比较复杂,但实际上它符合范围的一般形式:{start},{end}。在本例中,{start} 地址是模式/<html>/,而{end} 地址是/<\/html>/。换句话说,这个范围由<html> 开标签所在的行开始,到对应闭标签所在的行结。  

  在此例中,用地址:2,5 也可以获得同样的结果,并且这种表示方式更简洁,不过它也更不可靠。用模式指定范围的话,我们的命令总是对整个<html></html> 范围进行操作,无论这个范围包含多少行都没问题。

  

用偏移对地址进行修正范围

  接着上面的例子,假设我们想对位于<html></html>之间的每一行都运行一条 Ex 命令,但是不想包括<html> 及</html> 标签所在的行,那么此时偏移量就有大用了。

  

  偏移的一般形式是这样的:":{addr}+n"。

  {addr} 可以是一个{address} 或是一个查找模式。可以+n,也可以减-1。"+"表示向下偏移,"-"表示向上偏移

动作

复制

  语法::[range]t{address}  t==(t|copy|co)

  例如:

  注意事项:

  • 在上表中,也可以将yyp 变化一下来复制我们想要的行,但不管怎样,这都需要一些额外的移动动作。我们得先跳到想复制的行上(6G),复制该行(yy),快速跳回原先的位置(<C-o>),然后再用粘贴命令(p)创建一个副本。由此可见,在复制距离较远的行时,:t 命令通常更加高效。

移动

  语法::[range]m[ove]{address}

  使用方法同复制非常像,就不单作解释了。

显示

  想把匹配到东西显示出来的时候可以使用这个动作。

  语法::[range]p[rint]

连接

  把文本连接成一行的时候可以使用这个动作。

  语法::[range]j[oin]

删除

  语法::[range]d[elete][x]      

  可以把删除的内容放到寄存器x里。

  读取文本到当前缓存

  语法1:[range]r[ead]  !{cmd}  这里的{cmd}指的是外部的命令

  语法2:[range]r[ead]  {filename}  这里的{filename}指的是文件名称

  注意事项:

  • 这里的[range]如果是一个范围的话,只会取最后的位置

  把当前的缓存写到其他地方

这里的{filename}指的是文件名称

  语法如下

命令 用途
:[range]w[rite]  {filename} 把范围的文本写到指定的文件里。如果文件存在,不能直接覆盖
:[range]w[rite]!  {filename} 把范围的文本写到指定的文件里。如果文件存在,直接覆盖
:[range]w[rite]  >> 把范围的文本追加到当前文件尾。不过在窗口不会刷新出来。
:[range]w[rite]  >> {filename} 把范围的文本追加指定的文件尾。
:[range]w[rite]  !{cmd} 把范围文本当作标准输入文本调用命令

  注意事项:

  • 如果没有[range]和{filename},相当于覆盖当前文件

normal

  在一系列连续行上执行一条普通模式命令。此命令在与. 命令或宏结合使用时,我们只需花费很少的努力就能完成大量重复性任务。

  语法::[range]normal {commands}

  注意事项

  • {commands}是普通模式的命令

  例如

#想给所有行添加注释

#使用normal
:% normal I# #使用替换
:%s /^/#/g

global

  结合了Ex 命令与Vim 的模式匹配这两方面能力。凭借该命令,我们可以在某个指定模式的所有匹配行上运行Ex 命令。就处理重复工作的效率而言,global 命令是除点范式以及宏之外,最为强大的Vim 工具之一。

  语法::[range] global[!] /{pattern}/ [cmd]

  注意事项

  • 在缺省情况下,:global 命令的作用范围是整个文件(%),这一点与其他大多数Ex 命令(包括 :delete、:substitute 以及:normal)有所不同,这些命令的缺省范围仅为当前行(.)。

  • 反选使用:vglobal 或简写的:v。想对不匹配的内容操作的时候,可以使用这个命令。比如不匹配的全部删除::v/{pattern}/d
  • :print 是:global 命令的缺省[cmd]

查找

  语法:(/|?){pattern}

方向

  • 以/开头的,向后查找
  • 以?开头的,向前查找

重复查找

  • n     继续相当的方向查找
  • N     取相反的方向查找

关闭高亮功能的快捷键

  :noh <CR> 虽然可以禁用查找高亮功能,但我们在键盘操作上也花费了不少功夫。通过创建映射项,可以让我们加速操作。

  例如:

  nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>

  <C-l> 通常用于清除并重绘显示屏(参:h CTRL-L )。而新的映射项,是在原有基础之上增加了暂时关闭查找高亮的功能。

  这个用起来很带感哈。

在执行查找前预览第一处匹配  

  每次查找的时候定位到第一处匹配的位置。按esc的时候回到原来的位置。

  开启语法::incsearch

  可以用于检查是否存在一处匹配。

  例如

  假设我们只想确认单词“carrot”是否在当前文档中出现,却不想移动光标,该怎么办呢?
  当‘incsearch’选项被启用时,我们只需简单地调出查找提示符,并尽可能多地输入组成单词“carrot”的字符,直到该单词首次映入我们的眼帘。
  一旦找到该单词,我们只需按下<Esc> ,即可马上结束查找并返回原位,从而避免打断我们的思维。

根据预览结果对查找域自动补全

  此法会用当前预览的匹配结果对查找域进行自动补全。单词长的时候特别好用!!力荐

  语法:<C-r><C-w>

  例如

#文本里有一个单词like。

#查找步骤
/li
<C-r><C-W>
#此时会显示/like

将光标偏移到查找匹配的结尾

  会把光标定位到查找匹配的字符的结尾位置。如果不加的话会放在开始位置。

  语法:/{pattern}/e

  注意事项

  • 这里的"/"可以换成"?",不过两个"/",都必须换。就像这样:?{pattern}?e

查找当前选中的文本

  可以通过寄存器来实现。

  步骤如下:

  1. 用visual模式选中要查找的文本
  2. 然后使用y复制到寄存器""里。
  3. 最后输入/<C-r>"<CR>

替换

  语法::[range]s[ubstitute]/{pattern}/{string}/[flags]

重用上次的查找模式

  执行substitute 命令通常包括两个步骤:一是撰写查找模式,二是设计合适的替换字符串。因此,一分为二的技术让我们消除了这两项任务的耦合性,这才是关键所在。

  将substitute 命令的查找域留空,意味着Vim 将会重用上次的查找模式。我们可以利用这一特点精简工作过程。

  例如

# 看看这个庞大的substitute 命令吧
:%s/\v'(([^']|'\w)+)'/“\”/g #它等价于以下两条单独的命令:
/\v'(([^']|'\w)+)'
:%s//“\1”/g # 在我们撰写复杂的正则表达式过程中,通常需要尝试多次才能达到正确的匹配效果。
# 如果打算通过执行substitute 命令的方式来验证模式的话,每次执行命令都会改变文档的内容,这样做简直太麻烦了。
# 与之形成鲜明对比的是,当执行查找命令时,文档不会被修改。因此,即使我们犯的错误再多也无所谓 # 请注意,这个一般用于复杂的匹配。。如果很简单的匹配,就不要这么弄了。这个简单因人对正则的熟练度。
# 比如,,10行加注释,这个简单一句话就可以解决了。
:,10s/^/#/g

用寄存器的内容替换

  输入入<C-r>{register},我们可以将寄存器的内容插入到命令行

标记

  {flags}。不同的标记影响替换的行为。

  具体功能如下

字符 行为
& 保持上一个替换的标记
c 需要进行确认
e 如果有错误,不提示错误信息。暂时没有找到比较不错的场景
g 作用于全部匹配的内容
i 忽略大小写字母敏感
I 大小写字母敏感
n 统计计数,不执行替换内容。
p 打印出最后一次匹配的内容。如果有设置显示行号,则显示,没有设置则不显示行号
# 打印出最后一次匹配的内容,并且显示行号。
l 打印出最后一次匹配的内容,但是打印的内容和:list一致。按我理解是多打印出逃逸字符

  技巧:

  统计当前模式的匹配个数   

/{pattern}                #这个就是我们要统计的模式
:%s///gn           #抑止执行

模式

  即{pattern}。

  让我们先把目光集中在驱动它们运行的核心上,即Vim 的搜索引擎。你是否曾经想过Vim 的正则表达式是如何工作的?或者怎样关掉它们?

  Vim 的正则表达式引擎可能与你惯用的其他引擎有所不同。我们将会看到,最易混淆的差异可被very magic 模式开关轻松化解。

大小写敏感

  一般默认的是大小写敏感的。如果需要强制,在字符串后面加上标志即可。

  • \c(小写c),表示大小写不敏感
  • \C(大写c),表示大小写敏感

  例如

#查找单词"word",大小写不敏感
/word\c
#查找单词"word",大小写敏感
/word\C #把单词“word"替换为"me",大小写不敏感
:%s/word\c/me/g
#把单词“word"替换为"me",大小写敏感
:%s/word\C/me/g

vim的正则

  与Perl 相比,Vim 正则表达式的语法风格更接近POSIX。

  但是,通过使用very magic 模式开关,就可以让Vim 采用我们更为熟悉的正则表达式语法了。

  缺省使用的是magic模式。通过\v(小写v)可以使用very magic模式。通过\V(大写v)可以very nomagic模式。

例如

#假设我们要构造一个正则表达式,用于匹配以下CSS 片段中的每一组颜色代码:
body { color: #3c3c3c; }
a { color: #0000EE; }
strong { color: #; } #用magic 搜索模式查找十六进制颜色代码
/#\([-9a-fA-F]\{}\|[-9a-fA-F]\{}\) #用very magic 搜索模式查找十六进制颜色代码
/\v#([-9a-fA-F]{}|[-9a-fA-F]{}) #用十六进制字符类进一步优化模式
/\v#(\x{}|\x{})

  注意事项

  • 在此例中,magic模式我们用到了3 类括号。方括号缺省具有特殊含义,因此不用转义。圆括号会按原义匹配字符(及),因此需要转义,使其具有特殊含义。花括号也一样需要转义,不过,我们只需为开括号转义,而与之对应的闭括号则不用,因为Vim 会推测我们的意图。圆括号的情况有所不同,无论开闭括号都必须转义。

magic模式

  模式会自动为某些额外的符号赋予特殊含义,例如:. 、* 以及方括号。magic模式的设计初衷,是想能更容易地构造简单的正则表达式,但它却没能为诸如 +、?、圆括号以及花括号等符号赋予特殊含义,这些符号还必须经过转义才具有特殊含义。

nomagic模式

  暂时还不是很清楚???

very magic模式  

  开关正好弥补了这一点,除了 _、数字以及字母外,它为所有符号都赋予了特殊含义。这样一来,既好记又恰好与Perl 正则表达式的规则保持一致。

very nomagic模式

  在正则表达式中使用的特殊字符,在按模式查找时用起来很顺手,但如果我们想按原义查找文本时,它们就变成了阻碍。使用very nomagic 原义开关,可以消除附加在 .、* 以及? 等大多数字符上的特殊含义。

  例如:

#文本内容
The N key searches backward...
...the \v pattern switch (a.k.a. very magic search)... #现在假设我们想通过查找“a.k.a.”(此缩写表示also known as)的方式将光标移到
该处。针对这种情况,第一反应就是执行以下这条查找命令:
/a.k.a. #实质上我们需要这么才能得到效果
/a\.k\.a\.<CR> #或者,我们可以使用原义开关\V,激活very nomagic 搜索模式:
/ \Va.k.a.

  注意事项

  • 作为通用法则,如果你想按正则表达式查找,就用模式开关\v,而如果你想按原义查找文本,就用原义开关\V。这个要特别注意

特殊字符

  在几种模式的编写时,特殊字符比较容易混淆。

  几种模式的特殊字符对应列表如下:

magic nomagic very magic very nomagic 匹配内容
$ $ $ $ 行尾
. . \. \. 任何字符
* * \* \* 任何个数
() \(\) \(\) \(\)
| \| \| \| 分隔符
\a \a \a \a 字母表的字符
\\ \\ \\ \\ 反斜杠
\. \. . . 字符点
\{ { { { 字符{
a a a a 字符a

  

匹配和高亮 

  当我们谈论一个模式的时候,指的是在查找域输入的正则表达式(或者按原义匹配的文本);而匹配,是指在文档中被高亮显示的文本(假设已经启用'hlsearch'选项)。匹配和高亮是两件事。

  有这么个东东,但是暂时没觉得有什么用处,试了一下暂时没体会到运用场景。

  语法:

  • /zs  高亮开始
  • /ze  高亮结果

运行Shell 命令

  我们不用离开 Vim 就能方便地调用外部程序。更棒的是,我们还可以把缓冲区的内容作为标准输入发送给一个外部命令,或是把外部命令的标准输出导入到缓冲区里。

  在 Vim 中操作时,我们能很方便地调用shell 命令。下表选取了最有用的一些调用外部命令的方式

命令 用途
:shell 启动一个shell (输入exit 返回Vim)
:!{cmd} 在shell 中执行{cmd}
:read !{cmd} 在shell 中执行{cmd} ,并把其标准输出插入到光标下方
:[range]write !{cmd} 在shell 中执行{cmd} ,以[range] 作为其标准输入。这个暂时还没试明白?
:[range]!{filter} 使用外部程序{filter} 过滤指定的[range]

  运行shell命令一共有如下几种类型

一次性外部

  适用于执行一次性命令。

  语法::!{cmd}

交互

  适用于想在 shell 中执行几条命令。

  语法::shell

  注意事项

  • 想要退出的时候,输入exit,即可返回vim

使用外部命令过滤缓冲区内容

  语法::[range]!{filter}

  例如

#把当前文本排序一下

:% !sort

把命令的标准输出重定向到缓冲区  

  语法::[range]read !{cmd}

  例如

#文件开头插入当前时间

:0r !date

  注意事项

  • 如果没有[range],则插入到当前光标位置
  • 如果有[range],以range后面的匹配的范围行为准

菜鸟vimer成长记——第2.4章、cmd-line模式的更多相关文章

  1. 菜鸟vimer成长记——第2.1章、normal模式

    目的 掌握normal模式下常用操作的语法和概念,这些操作对应的应用场景以及实用技巧. 通过normal模式举一反三掌握cmd-line和visual的常用文本操作. 简介 文本操作的理想状态为:一个 ...

  2. 菜鸟vimer成长记——第2.3章、insert模式

    大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些. 如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成. 目的 掌握inser模式下常用操作的语法和概 ...

  3. 菜鸟vimer成长记——第2.2章、visual模式

    vi是没有可视模式的.然而大多数编辑软件都都是有可视模式.所以我猜测vim是几乎迫于无奈才有了visual模式. 个人建议,能不用就不用.这样能直接在头脑里处理好文本,锻炼文本处理能力,同时能转变过来 ...

  4. 菜鸟vimer成长记——第4.2章、编程插件

    简介 这部分的插件是与编程相关的插件.主要涉及两大块:所有编程语言通用的插件,以及各个语言独有的插件.插件的数量和合理性,这可能是一个不断累积和修正的过程. 个人感觉,现在比较适合sh,html,ma ...

  5. 菜鸟vimer成长记——第4.1章、通用插件

    简介 关于插件的分类,此系列只会简单的区分为通用插件和编程插件.通用插件的意思是,不基于任何编程语言都可以使用的插件.编程插件,是针对于编程习惯,或者说是针对于某种语言的插件. 计划中,是先把基本常用 ...

  6. 菜鸟vimer成长记——第4.0章、Vim插件管理利器-Vundle

    定义 Vundle是vim bunler和简称,它是一个vim插件管理器. Vim本身缺乏对插件的有效管理,安装插件并配置.vimrc文件非常不便.gmarik受到Ruby的bunler的启发,开发了 ...

  7. 菜鸟vimer成长记——第2.0章、模式初探

    首先,其他的文本编辑器只有一种模式,就是插入模式.而vim一下子颠覆了我们的世界观——有好多模式.这个是思维上的切换,很难也很重要!!! 其次,Vim 提供一个区分模式的用户界面.也就是说在不同的模式 ...

  8. 菜鸟vimer成长记——目录

    菜鸟vimer成长记——第0章.我眼中的vim学习 菜鸟vimer成长记——第1章.统一概念 菜鸟vimer成长记——第2.0章.模式初探 菜鸟vimer成长记——第2.1章.normal模式 菜鸟v ...

  9. 菜鸟vimer成长记——第0章、我眼中的vim学习

    这是一系统总结vim的学习文章,记录我自己学习vim的过程和感悟.与此同时也想分享出来给大家,欢迎大家互相讨论和学习. 在这里假设你们对vim已经有了一些基本的认识或者说已经使用过几个月的vim.该系 ...

随机推荐

  1. 使用FastCoder写缓存单例

    使用FastCoder写缓存单例 FastCoder可以存储字典,数组,鄙人将FastCoder封装,CoreData可以缓存的东西,用这个都可以缓存,但是只适合缓存少量的数据(不适合存储几万条数据) ...

  2. Python常见报错问题(不定时更新)

    1.TabError: inconsistent use of tabs and spaces in indentation 在缩进中不一致地使用tab键和空格键. 报错原因:混用了tab和space ...

  3. 解决 hibernate cannot define positional parameter after any named parameters have been defined

    解决 hibernate  cannot define positional parameter after any named parameters have been defined 把模糊查询的 ...

  4. 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入

    一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...

  5. 团队作业—预则立&&他山之石(改)

    首先特别感谢刘乾学长腾出他宝贵的时间接受我的采访,为我们提出宝贵的建议,深表感谢. 1.他山之石,可以攻玉.借鉴前人的经验可以使我们减少很多走弯路的地方,这也是本次采访的目的,参考历届学长的经验,让我 ...

  6. Mina使用总结(二)Handler

    Handler的基本作用,处理接收到的客户端信息 一个简单的Handler实现如下: package com.bypay.mina.handler; import java.util.Date; im ...

  7. 使用FASTJSON做反序列化的时间格式处理

    JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.mmm"; Productorder tmp1 = JSONObj ...

  8. cocos2d-x发生undefined reference to `XX'异常 一劳永逸解决的方法

    转自:http://www.myexception.cn/operating-system/1620542.html cocos2d-x发生undefined reference to `XX'错误 ...

  9. 【CF662C】Binary Table

    题目 好吧,我连板子都不会了 有一个非常显然的做法就是\(O(2^nm)\)做法就是枚举每一行的状态,之后我们贪心去看看每一列是否需要翻转就好啦 显然这个做法非常垃圾过不去 首先我们发现每一列都不超过 ...

  10. 【openjudge】【递推】例3.4 昆虫繁殖

    [题目描述] 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对卵要过两个月长成成虫.假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵 ...