ENSP入门(一)

[Huawei] 中括号下的模式system view:系统视图/系统模式

尖括号下的模式user view:用户模式/用户视图

system-view 从用户模式进入系统模式(或sys)
系统模式→用户模式:q或quit

总结:华为设备有两种配置模式:用户/系统,CLI首先进入用户模式
如果需要对设备进行业务方面的配置时,需要从用户模式进入系统模式
拿到一台设备,首先给它命名
sysname + 新名字

设备管理方式
①本地管理
②远程管理
【两种方式中所使用的线路】
console线路

【如何配置console线路】
设置console密码:
user-interface console 0
选择密码的认证模式password认证模式:authentication-mode password,执行然后输密码就完事
退出q
生效之后,需输密码才有尖括号什么的
在设备里输入save可保存本机配置,在虚拟设备再次开机后可复原自定义配置。

另一个console线路管理:aaa认证
sys
user-interface console 0
authentication-mode aaa
q
aaa(进aaa模式)更安全,类似数据库管理员的权限😂
local-user +用户名 password cipher +密码
local-user +用户名 privilege level +优先级1、2、3等

解决Deepin系统上OBS闪退的问题

title: 解决Deepin系统上OBS闪退的问题
date: '2019-07-14 16:02:56'
updated: '2019-07-14 16:13:17'
tags: [deepin, obs]

permalink: /articles/2019/07/14/1563091376495.html

安装Flatpak

apt install flatpak
apt install gnome-software-plugin-flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

通过Flatpak安装obs

flatpak install flathub com.obsproject.Studio

运行obs

flatpak run com.obsproject.Studio

参考

https://flatpak.org/setup/Debian/
https://flathub.org/apps/details/com.obsproject.Studio

完美!

新建一个obs.sh文件

#!/bin/bash
flatpak run com.obsproject.Studio
右键-->属性-->权限管理-->勾上允许以程序运行
这样启动obs的时候双击这个文件,选择运行,大功告成!

‘【荐读】知乎上40个有趣回复,很精辟 ‘

title: '【荐读】知乎上40个有趣回复,很精辟 '
date: '2019-07-01 21:40:50'
updated: '2019-07-01 21:40:50'
tags: [鸡汤]

permalink: /articles/2019/07/01/1561988450412.html

转自https://mp.weixin.qq.com/s/HrJlXrRI490zVL0LDYoR0g
1

交朋友的标准是什么?

  • Question -

出世的智者,

入世的强者,

或者正常而阳光的普通人。

  • Answer -

2

有哪些可以令人清醒的句子?

  • Question -

你多学一样本事,

就少说一句求人的话。

  • Answer -

3

做哪些事情可以提升生活品质?

  • Question -

定期扔东西。

  • Answer -

4

结婚以后两个人在一起最重要的是什么?

  • Question -

就当这婚还没结。

  • Answer -

5

把学费拿来念书还是环游世界更合适?

为什么?

  • Question -

在没有充分的知识作为前提的情况下,

即使行了万里路,

也不过是邮差而已。

  • Answer -

6

你是如何强迫自己不断学习提升的?

  • Question -

看过更大的世界后,

就再也不甘心留在原地。

不甘心就是动力。

  • Answer -

7

你对自由的理解是什么?

  • Question -

说“不”的能力。

  • Answer -

8

你是如何走出人生的阴霾的?

  • Question -

多走几步。

  • Answer -

9

哪些技能,经较短时间的学习,

就可以给人的生活带来巨大帮助?

  • Question -

夸奖他人。

  • Answer -

10

我读过很多书,

但后来大部分都被我忘记了,

那阅读的意义是什么?

  • Question -

当我还是个孩子的时候,

我吃过很多食物,

现在已经记不起来吃过什么了。

但可以肯定的是,

它们中的一部分已经长成为我的骨头和肉。

  • Answer -

11

要怎样努力,才能成为很厉害的人?

  • Question -

如果你注定要成为厉害的人,

那问题的答案就深藏在你的血脉里;

如果你注定不是厉害的人,

那你便只需要做好你自己。

  • Answer -

12

你在生活中得到过的最好的建议是什么?

  • Question -

“永远不要为尚未发生的事儿拧巴”、

“觉得为时已晚,恰恰是最早的时候”。

  • Answer -

13

前半生与后半生的分界线是在哪里?

  • Question -

此时此刻。

  • Answer -

14

同样是别人比自己强,

为什么有时会产生嫉妒心理,

而有时会产生崇拜?

  • Question -

远的崇拜,近的嫉妒;

够不着的崇拜,够得着的嫉妒;

有利益冲突的嫉妒,没利益冲突的崇拜。

  • Answer -

15

如何让这个世界变得美好?

  • Question -

把你自己变得更美好。

  • Answer -

16

二十六岁,工作三年

却将留学三年,值得吗?

  • Question -

普通玩家选择标准配置,

高端玩家选择自定义配置。

  • Answer -

17

世界上有那么多好书好电影

注定看不完,

我们对这个事实该持何种态度?

  • Question -

怕什么真理无穷,

进一寸有一寸的欢喜。

  • Answer -

18

听过最落寞的一句话或诗句是什么?

  • Question -

不如意事常八九,

可与言者无二三。

  • Answer -

19

人这一生为什么要努力?

  • Question -

最痛苦的事,不是失败,

是我本可以。

  • Answer -

20

省钱的好办法有哪些?

  • Question -

在买任何东西之前牢记九字箴言:

你喜欢,你需要,你适合。

PS:适用于很多事,包括感情也一样。

  • Answer -

21

哪一段话让你有醍醐灌顶的感觉?

  • Question -

人会长大三次。

第一次是在发现

自己不是世界中心的时候。

第二次是在发现即使再怎么努力,

终究还是有些事令人无能为力的时候。

第三次是在,

明知道有些事可能会无能为力,

但还是会尽力争取的时候。

  • Answer -

22

哪些行为是浪费时间?

  • Question -

思而不学+犹豫不决

  • Answer -

23

如果好人不一定得到好报,

那我们为什么还要做好事?

  • Question -

我们坚持一件事情,

并不是因为这样做了会有效果,

而是坚信,这样做是对的。

  • Answer -

24

如何看待

“年轻的时候需要的是朋友而不是人脉”?

  • Question -

没有目的之交往,

才能感动人。

  • Answer -

25

有哪些道理是你读了不信、听不进去,

直到你亲身经历方笃信不疑的?

  • Question -

不要低估你的能力,

不要高估你的毅力。

  • Answer -

26

最能燃起你学习激情的一句话是什么?

  • Question -

你不能把这个世界,

让给你所鄙视的人。

  • Answer -

27

你心中的完美爱情是怎么样的?

  • Question -

可以有不完美。

  • Answer -

28

怎样才能做到不在乎别人骂?

  • Question -

你要相信,比你优秀的人

基本没空骂你。

  • Answer -

29

什么叫见过大世面?

  • Question -

能享受最好的,

能承受最坏的。

  • Answer -

30

为什么当看到好照片时

人们通常的反应是

“真不错,你用的是什么相机”

当看到烂照片时,

则往往笑话拍摄者水平很臭?

  • Question -

人习惯性地

将自己的成功归因于自身,

失败归因于环境;

而将他人的成功归因于环境,

失败归因于其自身。

  • Answer -

31

如何反驳

“现实点,这个社会就是这样”?

  • Question -

“你是怎样,你的世界就是怎样。”

  • Answer -

32

如何让感情保持新鲜感?

  • Question -

所谓新鲜感,

不是和未知的人一起去做同样的事情,

而是和已知的人一起去体验未知的人生。

  • Answer -

33

情商不高的例子有哪些?

  • Question -

对陌生人毕恭毕敬,

对亲近的人随意发怒。

  • Answer -

34

三十岁才开始学习编程,靠谱吗?

  • Question -

种一棵树最好的时间是十年前,

其次是现在。

  • Answer -

35

怎样在有效提出推荐或建议的同时,

避免给人灌输和强迫的感觉?

  • Question -

说服他人不要诉诸理性,

应求于利益。

  • Answer -

36

在一个足够小的星球上行走,

我们是在上坡还是下坡?

  • Question -

你感觉累就是上坡,

感觉轻松就是下坡。

  • Answer -

37

你遇到过哪些让你眼前一亮、醍醐灌顶

或对你改变很大的理念?

  • Question -

天赋决定了你能达到的上限,

努力程度决定了你能达到的下限。

以绝大多数人的努力程度之低,

远远没有达到要去拼天赋的地步。

  • Answer -

38

扎克伯格初期是怎么

保护Facebook的最初创意?

为什么Facebook上线后

没被其他大公司抄走?

  • Question -

保护创意的最好方法,就是 ——

将其最好地执行。

  • Answer -

39

如何看待

“年轻时就释怀与淡泊,是没有希望的”

这句话?

  • Question -

试图用一句话就来总结复杂的人生,

是没有希望的。

  • Answer -

40

异国长期生活,

改变了你的哪些“是非观”?

  • Question -

很多事情,

只是不同,并无是非。

  • Answer -

《 V I M 教 程 》

title: 《 V I M 教 程 》
date: '2019-07-09 22:25:37'
updated: '2019-07-09 22:25:37'
tags: [linux, vim]

permalink: /articles/2019/07/09/1562682337699.html

===============================================================================

=      欢     迎     阅     读   《 V I M  教  程 》   ——      版本 1.7       =

===============================================================================

 

Vim 是一个具有很多命令的功能非常强大的编辑器。限于篇幅,在本教程当中

     就不详细介绍了。本教程的设计目标是讲述一些必要的基本命令,而掌握好这

     些命令,您就能够很容易地将Vim 当作一个通用编辑器来使用了。

 

     完成本教程的内容大约需要25-30分钟,取决于您训练的时间。

 

     注意:

     每一节的命令操作将会更改本文。推荐您复制本文的一个副本,然后在副本上

     进行训练(如果您是通过"vimtutor"来启动教程的,那么本文就已经是副本了)。

 

     切记一点:本教程的设计思路是在使用中进行学习的。也就是说,您需要通过

     执行命令来学习它们本身的正确用法。如果您只是阅读而不操作,那么您可能

     会很快遗忘这些命令的!

 

     好了,现在请确定您的Shift-Lock(大小写锁定键)还没有按下,然后按键盘上

     的字母键j 足够多次来移动光标,直到第一节的内容能够完全充满屏幕。

 

                        第一讲第一节:移动光标

  

** 要移动光标,请依照说明分别按下 h、j、k、l 键。 **

 

             ^

             k              提示:h 的键位于左边,每次按下就会向左移动。

< h       l >               l 的键位于右边,每次按下就会向右移动。

j                     j 键看起来很象一支尖端方向朝下的箭头。

             v

 

1. 请随意在屏幕内移动光标,直至您觉得舒服为止。

 

2. 按下下行键(j),直到出现光标重复下行。

 

---> 现在您应该已经学会如何移动到下一讲吧。

 

3. 现在请使用下行键,将光标移动到第一讲第二节。

 

提示:如果您不敢确定您所按下的字母,请按下<ESC>键回到正常(Normal)模式。

      然后再次从键盘输入您想要的命令。

 

提示:光标键应当也能正常工作的。但是使用hjkl键,在习惯之后您就能够更快

      地在屏幕内四处移动光标。真的是这样!

 

                        第一讲第二节:VIM的进入和退出

  

!! 特别提示:敬请阅读本一节的完整内容,然后再执行以下所讲解的命令。

 

  1. 键(这是为了确保您处在正常模式)。

 

  1. 然后输入:                 :q! <回车>

    这种方式的退出编辑器会丢弃您进入编辑器以来所做的改动。

 

  1. 如果您看到了命令行提示符,请输入能够带您回到本教程的命令,那就是:

     vimtutor <回车>

 

  1. 如果您自信已经牢牢记住了这些步骤的话,请从步骤1执行到步骤3退出,然

     后再次进入编辑器。

 

提示: :q! <回车> 会丢弃您所做的任何改动。几讲之后您将学会如何保存改动到文件。

 

  1. 将光标下移到第一讲第三节。

  

                        第一讲第三节:文本编辑之删除

  

** 在正常(Normal)模式下,可以按下 x 键来删除光标所在位置的字符。**

 

1. 请将光标移动到本节中下面标记有---> 的那一行。

 

2. 为了修正输入错误,请将光标移至准备删除的字符的位置处。

 

3. 然后按下 x 键将错误字符删除掉。

 

4. 重复步骤2到步骤4,直到句子修正为止。

 

---> The ccow jumpedd ovverr thhe mooon.

 

5. 好了,该行已经修正了,下面是第一讲第四节。

 

特别提示:在浏览本教程时,不要强行记忆。记住一点:在使用中学习。

   

                     第一讲第四节:文本编辑之插入

  

在正常模式下,可以按下i 键来插入文本。

 

  1. 请将光标移动到本节中下面标记有---> 的第一行。

 

  1. 为了使得第一行内容雷同于第二行,请将光标移至文本第一个准备插入字符

     的位置。

 

  1. 然后按下i 键,接着输入必要的文本字符。

 

  1. 每个错误修正完毕后,请按下 键返回正常模式。

     重复步骤2至步骤4以便修正句子。

 

---> There is text misng this .

---> There is some text missing from this line.

 

  1. 如果您对文本插入操作已经很满意,请接着阅读下面的第一讲第五节。

   

                     第一讲第五节:文本编辑之添加

  

** 按 A 键以添加文本。 **

 

1. 移动光标到下面第一个标记有---> 的一行。

     光标放在那一行的哪个字符上并不重要。

 

2. 按 A 键输入必要的添加内容。

 

3. 文本添加完毕后,按<ESC> 键回到正常模式。

 

4. 移动光标到下面第二个标记有---> 的一行。重复步骤2和步骤3以改正这个句子。

 

---> There is some text missing from th

     There is some text missing from this line.

---> There is also some text miss

     There is also some text missing here.

 

5. 当您对添加文本操作感到满意时,请继续学习第一讲第六节。

 

                     第一讲第六节:编辑文件

 

使用 :wq 以保存文件并退出。 

 

  特别提示:在执行以下步骤之前,请先读完整个小节!

 

  1. 如您在第一讲第二节中所做的那样退出本教程: :q!

     或者,如果您可以访问另一个终端,请在那里执行以下操作。

 

  1. 在 shell 的提示符下输入命令: vim tutor <回车>

     'vim'是启动Vim 编辑器的命令,'tutor'是您希望编辑的文件的名字。

     请使用一个可以改动的文件。

 

  1. 使用您在前面的教程中学到的命令插入删除文本。

 

  1. 保存改动过的文件并退出 Vim,按这些键: :wq  <回车>

 

  1. 如果您在步骤1中已经退出 vimtutor,请重启vimtutor 移动到下面的小结一节。

 

  1. 阅读完以上步骤,弄懂它们的意义,然后在实践中进行练习。

 

                               第一讲小结

  

1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用hjkl 字母键。

         h (左移)       j (下行)       k (上行)     l (右移)

 

2. 欲进入Vim 编辑器(从命令行提示符),请输入:vim 文件名 <回车>

 

3. 欲退出Vim 编辑器,请输入 <ESC>   :q!   <回车> 放弃所有改动。

                      或者输入 <ESC>   :wq   <回车> 保存改动。

 

4. 在正常模式下删除光标所在位置的字符,请按: x

 

5. 欲插入或添加文本,请输入:

 

         i   输入欲插入文本   <ESC>             在光标前插入文本

         A   输入欲添加文本   <ESC>             在一行后添加文本

 

特别提示:按下<ESC> 键会带您回到正常模式或者撤消一个不想输入或部分完整

的命令。

 

好了,第一讲到此结束。下面接下来继续第二讲的内容。

   

                        第二讲第一节:删除类命令

  

输入dw 可以从光标处删除至一个单词的末尾。

 

  1. 请按下 键确保您处于正常模式。

 

  1. 请将光标移动到本节中下面标记有---> 的那一行。

 

  1. 请将光标移至准备要删除的单词的起始处。

 

  1. 接着输入dw 删除掉该单词。

 

  特别提示:当您输入时,字母d 会同时出现在屏幕的最后一行。Vim 在等待您输入

  字母 w。如果您看到的是除d 外的其他字符,那表明您按错了;请按下 键,

  然后重新再来。

 

---> There are a some words fun that don't belong paper in this sentence.

 

  1. 重复步骤3和步骤4,直至句子修正完毕。接着继续第二讲第二节内容。

  

                      第二讲第二节:更多删除类命令

  

** 输入 d$ 从当前光标删除到行末。**

 

1. 请按下<ESC> 键确保您处于正常模式。

 

2. 请将光标移动到本节中下面标记有---> 的那一行。

 

3. 请将光标移动到该行的尾部(也就是在第一个点号‘.’后面)。

 

4. 然后输入 d$ 从光标处删至当前行尾部。

 

---> Somebody typed the end of this line twice. end of this line twice.

  

5. 请继续学习第二讲第三节就知道是怎么回事了。

    

                     第二讲第三节:关于命令和对象

  

  许多改变文本的命令都由一个操作符和一个动作构成。

  使用删除操作符d 的删除命令的格式如下:

 

        d   motion

 

  其中:

d      - 删除操作符。

motion - 操作符的操作对象(在下面列出)。

 

  一个简短的动作列表:

w - 从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符。

e - 从当前光标当前位置直到单词末尾,包括最后一个字符。

$ - 从当前光标当前位置直到当前行末。

 

  因此输入de 会从当前光标位置删除到单词末尾。

 

特别提示:

    对于勇于探索者,请在正常模式下面仅按代表相应动作的键而不使用操作符,您

    将看到光标的移动正如上面的对象列表所代表的一样。

 

                     第二讲第四节:使用计数指定动作

  

** 在动作前输入数字会使它重复那么多次。 **

 

1. 移动光标到下面标记有---> 的一行的开始。

 

2. 输入 2w 使光标向前移动两个单词。

 

3. 输入3e 使光标向前移动到第三个单词的末尾。

 

4. 输入 0 (数字零) 移动光标到行首。

 

5. 重复步骤2和步骤3,尝试不同的数字。

 

---> This is just a line with words you can move around in.

 

6. 请继续学习第二讲第五节。

   

                       第二讲第五节:使用计数以删除更多

  

使用操作符时输入数字可以使它重复那么多次。 

 

  上面已经提到过删除操作符和动作的组合,您可以在组合中动作之前插入一个数字以

  删除更多:

         d   number(数字)   motion

  

  1. 移动光标到下面标记有---> 的一行中第一个大写字母单词上。

 

  1. 输入 d2w 以删除两个大写字母单词。

 

  1. 重复步骤1和步骤2,使用不同的数字使得用一个命令就能删除全部相邻的大写字母

     单词

 

--->  this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.

     

                            第二讲第六节:操作整行

  

** 输入dd 可以删除整一个当前行。 **

 

  鉴于整行删除的高频度,Vi 的设计者决定要简化整行删除操作,您仅需要在同一行上

  击打两次d 就可以删除掉光标所在的整行了。

 

1. 请将光标移动到本节中下面的短句段落中的第二行。

2. 输入dd 删除该行。

3. 然后移动到第四行。

4. 接着输入2dd 删除两行。

 

--->  1)  Roses are red,

--->  2)  Mud is fun,

--->  3)  Violets are blue,

--->  4)  I have a car,

--->  5)  Clocks tell time,

--->  6)  Sugar is sweet

--->  7)  And so are you.

  

                           第二讲第七节:撤消类命令

  

输入u 来撤消最后执行的命令,输入U 来撤消对整行的修改。 

 

  1. 请将光标移动到本节中下面标记有---> 的那一行,并将其置于第一个错误

     处。

  1. 输入 x 删除第一个不想保留的字母。
  2. 然后输入u 撤消最后执行的(一次)命令。
  3. 这次要使用 x 修正本行的所有错误。
  4. 现在输入一个大写的U ,恢复到该行的原始状态。
  5. 接着多次输入u 以撤消U 以及更前的命令。
  6. 然后多次输入 CTRL-R (先按下 CTRL 键不放开,接着按 R 键),这样就

     可以重做被撤消的命令,也就是撤消掉撤消命令。

 

---> Fiix the errors oon thhis line and reeplace them witth undo.

 

  1. 这些都是非常有用的命令。下面是第二讲的小结了。

 

                               第二讲小结

  

1. 欲从当前光标删除至下一个单词,请输入:dw

2. 欲从当前光标删除至当前行末尾,请输入:d$

3. 欲删除整行,请输入:dd

 

4. 欲重复一个动作,请在它前面加上一个数字:2w

5. 在正常模式下修改命令的格式是:

               operator   [number]   motion

     其中:

operator - 操作符,代表要做的事情,比如d 代表删除

[number] - 可以附加的数字,代表动作重复的次数

motion   - 动作,代表在所操作的文本上的移动,例如w 代表单词(word),

$ 代表行末等等。

 

6. 欲移动光标到行首,请按数字0键:0

 

7. 欲撤消以前的操作,请输入:u (小写的u)

     欲撤消在一行中所做的改动,请输入:U (大写的U)

     欲撤消以前的撤消命令,恢复以前的操作结果,请输入:CTRL-R

 

                           第三讲第一节:置入类命令

  

输入 p 将最后一次删除的内容置入光标之后。 

 

  1. 请将光标移动到本节中下面第一个标记有---> 的一行。

 

  1. 输入dd 将该行删除,这样会将该行保存到Vim 的一个寄存器中。

 

  1. 接着将光标移动到c) 一行,即准备置入的位置的上方。记住:是上方哦。

 

  1. 然后在正常模式下(键进入)输入 p 将该行粘贴置入。

 

  1. 重复步骤2至步骤4,将所有的行依序放置到正确的位置上。

 

---> d) Can you learn too?

---> b) Violets are blue,

---> c) Intelligence is learned,

---> a) Roses are red,

   

                           第三讲第二节:替换类命令

  

** 输入r 和一个字符替换光标所在位置的字符。**

 

1. 请将光标移动到本节中下面标记有---> 的第一行。

2. 请移动光标到第一个出错的位置。

 

3. 接着输入r 和要替换成的字符,这样就能将错误替换掉了。

 

4. 重复步骤2和步骤3,直到第一行已经修改完毕。

 

--->  Whan this lime was tuoed in, someone presswd some wrojg keys!

--->  When this line was typed in, someone pressed some wrong keys!

 

5. 然后我们继续学习第三讲第三节。

 

特别提示:切记您要在使用中学习,而不是在记忆中学习。

   

                        第三讲第三节:更改类命令

  

要改变文本直到一个单词的末尾,请输入 ce

 

  1. 请将光标移动到本节中下面标记有---> 的第一行。

 

  1. 接着把光标放在单词lubw 的字母u 的位置那里。

 

  1. 然后输入cw 以及正确的单词(在本例中是输入 ine )。

 

  1. 最后按 键,然后光标定位到下一个错误第一个准备更改的字母处。

 

  1. 重复步骤3和步骤4,直到第一个句子完全雷同第二个句子。

 

---> This lubw has a few wptfd that mrrf changing usf the change operator.

---> This line has a few words that need changing using the change operator.

 

提示:请注意ce 命令不仅仅是删除了一个单词,它也让您进入插入模式了。

   

                       第三讲第四节:使用c更改更多

  

** 更改类操作符可以与删除中使用的同样的动作配合使用。 **

 

1. 更改类操作符的工作方式跟删除类是一致的。操作格式是:

 

         c    [number]   motion

 

2. 动作参数(motion)也是一样的,比如w 代表单词,$代表行末等等。

 

3. 请将光标移动到本节中下面标记有---> 的第一行。

 

4. 接着将光标移动到第一个错误处。

 

5. 然后输入 c$ 使得该行剩下的部分更正得同第二行一样。最后按<ESC> 键。

---> The end of this line needs some help to make it like the second.

---> The end of this line needs to be corrected using the  c$  command.

   

                                  第三讲小结

  

  1. 要重新置入已经删除的文本内容,请按小写字母 p 键。该操作可以将已删除

     的文本内容置于光标之后。如果最后一次删除的是一个整行,那么该行将置

     于当前光标所在行的下一行。

 

  1. 要替换光标所在位置的字符,请输入小写的r 和要替换掉原位置字符的新字

     符即可。

 

  1. 更改类命令允许您改变从当前光标所在位置直到动作指示的位置中间的文本。

     比如输入ce 可以替换当前光标到单词的末尾的内容;输入 c$ 可以替换当

     前光标到行末的内容。

 

  1. 更改类命令的格式是:

 

         c   [number]   motion

 

现在我们继续学习下一讲。

   

                     第四讲第一节:定位及文件状态

 

** 输入CTRL-G 显示当前编辑文件中当前光标所在行位置以及文件状态信息。

     输入大写G 则直接跳转到文件中的某一指定行。**

 

  提示:切记要先通读本节内容,之后才可以执行以下步骤!!!

 

1. 按下 CTRL 键不放开然后按g 键。我们称这个键组合为 CTRL-G。

     您会看到页面最底部出现一个状态信息行,显示的内容是当前编辑的文件名

     和文件中光标位置。请记住行号,它会在步骤3中用到。

 

提示:您也许会在屏幕的右下角看到光标位置,这会在 'ruler' 选项设置时发生

      (参见 :help 'ruler')

 

2. 输入大写G 可以使得当前光标直接跳转到文件最后一行。

     输入gg 可以使得当前光标直接跳转到文件第一行。

 

3. 输入您曾停留的行号,然后输入大写 G。这样就可以返回到您第一次按下

CTRL-G 时所在的行了。

 

4. 如果您觉得没问题的话,请执行步骤1至步骤3的操作进行练习。

 

                        第四讲第二节:搜索类命令

 

输入/ 加上一个字符串可以用以在当前文件中查找该字符串。

 

  1. 在正常模式下输入/ 字符。您此时会注意到该字符和光标都会出现在屏幕底

     部,这跟: 命令是一样的。

 

  1. 接着输入 errroor <回车>。那个errroor就是您要查找的字符串。

 

  1. 要查找同上一次的字符串,只需要按n 键。要向相反方向查找同上一次的字

     符串,请输入大写 N 即可。

 

  1. 如果您想逆向查找字符串,请使用? 代替/ 进行。

 

  1. 要回到您之前的位置按 CTRL-O (按住Ctrl 键不放同时按下字母 o)。重复按可以

     回退更多步。CTRL-I 会跳转到较新的位置。

 

--->  "errroor" is not the way to spell error;  errroor is an error.

提示:如果查找已经到达文件末尾,查找会自动从文件头部继续查找,除非

'wrapscan' 选项被复位。

 

                   第四讲第三节:配对括号的查找

  

** 输入% 可以查找配对的括号 )、]、}。**

 

1. 把光标放在本节下面标记有--> 那一行中的任何一个 (、[ 或{ 处。

 

2. 接着按% 字符。

 

3. 此时光标的位置应当是在配对的括号处。

 

4. 再次按% 就可以跳回配对的第一个括号处。

 

5. 移动光标到另一个 (、)、[、]、{ 或} 处,按% 查看其所作所为。

 

---> This ( is a test line with ('s, ['s ] and {'s } in it. ))

  

提示:在程序调试时,这个功能用来查找不配对的括号是很有用的。

   

                      第四讲第四节:替换命令

  

输入:s/old/new/g 可以替换 old 为 new。

 

  1. 请将光标移动到本节中下面标记有---> 的那一行。

 

  1. 输入 :s/thee/the <回车> 。请注意该命令只改变光标所在行的第一个    串。

 

  1. 输入 :s/thee/the/g 则是替换全行的匹配串,该行中所有的 "thee" 都会被

     改变。

 

---> thee best time to see thee flowers is in thee spring.

 

  1. 要替换两行之间出现的每个匹配串,请

     输入   :#,#s/old/new/g   其中#,# 代表的是替换操作的若干行中

                              首尾两行的行号。

     输入   :%s/old/new/g     则是替换整个文件中的每个匹配串。

     输入   :%s/old/new/gc    会找到整个文件中的每个匹配串,并且对每个匹配串

                              提示是否进行替换。

 

                               第四讲小结

  

1. CTRL-G 用于显示当前光标所在位置和文件状态信息。

G 用于将光标跳转至文件最后一行。

     先敲入一个行号然后输入大写G 则是将光标移动至该行号代表的行。

gg 用于将光标跳转至文件第一行。

 

2. 输入/ 然后紧随一个字符串是在当前所编辑的文档中正向查找该字符串。

     输入? 然后紧随一个字符串则是在当前所编辑的文档中反向查找该字符串。

     完成一次查找之后按n 键是重复上一次的命令,可在同一方向上查

     找下一个匹配字符串所在;或者按大写 N 向相反方向查找下一匹配字符串所在。

CTRL-O 带您跳转回较旧的位置,CTRL-I 则带您到较新的位置。

 

3. 如果光标当前位置是括号(、)、[、]、{、},按% 会将光标移动到配对的括号上。

 

4. 在一行内替换头一个字符串 old 为新的字符串 new,请输入  :s/old/new

     在一行内替换所有的字符串 old 为新的字符串 new,请输入  :s/old/new/g

     在两行内替换所有的字符串 old 为新的字符串 new,请输入  :#,#s/old/new/g

     在文件内替换所有的字符串 old 为新的字符串 new,请输入  :%s/old/new/g

     进行全文替换时询问用户确认每个替换需添加c 标志        :%s/old/new/gc

 

                第五讲第一节:在VIM 内执行外部命令的方法

  

输入:! 然后紧接着输入一个外部命令可以执行该外部命令。

 

  1. 按下我们所熟悉的: 命令使光标移动到屏幕底部。这样您就可以输入一行命令了。

 

  1. 接着输入感叹号! 这个字符,这样就允许您执行外部的 shell 命令了。

 

  1. 我们以 ls 命令为例。输入 !ls <回车> 。该命令就会列举出您当前目录的

     内容,就如同您在命令行提示符下输入 ls 命令的结果一样。如果!ls 没起

     作用,您可以试试:!dir 看看。

 

提示:所有的外部命令都可以以这种方式执行,包括带命令行参数的那些。

 

提示:所有的: 命令都必须以敲 <回车> 键结束。从今以后我们就不会总是提到这一点

                      第五讲第二节:关于保存文件的更多信息

  

** 要将对文件的改动保存到文件中,请输入 :w FILENAME 。**

 

1. 输入:!dir 或者:!ls 获知当前目录的内容。您应当已知道最后还得敲

     <回车> 吧。

 

2. 选择一个未被用到的文件名,比如 TEST。

 

3. 接着输入 :w TEST  (此处 TEST 是您所选择的文件名。)

 

4. 该命令会以 TEST 为文件名保存整个文件(Vim 教程)。为了验证这一点,

     请再次输入:!dir 或:!ls 查看您的目录列表内容。

 

请注意:如果您退出Vim 然后在以命令vim TEST 再次启动 Vim,那么该文件内

     容应该同您保存时的文件内容是完全一样的。

 

5. 现在您可以删除 TEST 文件了。在MS-DOS 下,请输入:   :!del TEST

                                 在 Unix 下,请输入:     :!rm TEST

  

                    第五讲第三节:一个具有选择性的保存命令

  

要保存文件的部分内容,请输入 v motion :w FILENAME

 

  1. 移动光标到本行。

 

  1. 接着按v 键,将光标移动至下面第五个条目上。您会注意到之间的文本被高亮了。

 

  1. 然后按: 字符。您将看到屏幕底部会出现:'<,'> 。

 

  1. 现在请输入 w TEST,其中 TEST 是一个未被使用的文件名。确认您看到了

:'<,'>w TEST 之后按 <回车> 键。

 

  1. 这时Vim 会把选中的行写入到以 TEST 命名的文件中去。使用:!dir 或 :!ls

     确认文件被正确保存。这次先别删除它!我们在下一讲中会用到它。

 

提示:按v 键使Vim 进入可视模式进行选取。您可以四处移动光标使选取区域变大或

      变小。接着您可以使用一个操作符对选中文本进行操作。例如,按d 键会删除

      选中的文本内容。

  

                   第五讲第四节:提取和合并文件

  

** 要向当前文件中插入另外的文件的内容,请输入 :r FILENAME **

 

1. 请把光标移动到本行上面一行。

特别提示:执行步骤2之后您将看到第五讲第三节的文字,请届时往下移动

          以再次看到本讲内容。

 

2. 接着通过命令 :r TEST 将前面创建的名为 TEST 的文件提取进来。

     您所提取进来的文件将从光标所在位置处开始置入。

 

3. 为了确认文件已经提取成功,移动光标回到原来的位置就可以注意有两份第

     五讲第三节的内容,一份是原始内容,另外一份是来自文件的副本。

 

提示:您还可以读取外部命令的输出。例如, :r !ls 可以读取 ls 命令的输出,并

      把它放置在光标下面。

    

                               第五讲小结

  

  1. :!command 用于执行一个外部命令 command。

 

     请看一些实际例子:

         (MS-DOS)         (Unix)

          :!dir            :!ls            -  用于显示当前目录的内容。

          :!del FILENAME   :!rm FILENAME   -  用于删除名为 FILENAME 的文件。

 

  1. :w FILENAME  可将当前VIM 中正在编辑的文件保存到名为 FILENAME 的文

     件中。

 

  1. v motion :w FILENAME 可将当前编辑文件中可视模式下选中的内容保存到文件

FILENAME 中。

 

  1. :r FILENAME 可提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置

     后面。

 

  1. :r !dir 可以读取dir 命令的输出并将其放置到当前文件的光标位置后面。

  

                         第六讲第一节:打开类命令

  

** 输入 o 将在光标的下方打开新的一行并进入插入模式。**

 

1. 请将光标移动到本节中下面标记有---> 的那一行。

 

2. 接着输入小写的 o 在光标 *下方* 打开新的一行,这个命令会使您

     进入插入模式。

 

3. 然后输入一些文字,之后按<ESC> 键退出插入模式而进入正常模式。

 

---> After typing  o  the cursor is placed on the open line in Insert mode.

 

4. 为了在光标 *上方* 打开新的一行,只需要输入大写的 O 而不是小写的 o

     就可以了。请在下行测试一下吧。

---> Open up a line above this by typing O while the cursor is on this line.

    

                        第六讲第二节:附加类命令

  

输入a 将可在光标之后插入文本。 

 

  1. 请在正常模式下将光标移动到本节中下面标记有---> 的第一行的行首。

 

  1. 接着输入e 直到光标位于li 的末尾。

 

  1. 输入小写的a 则可在光标之后插入文本了。

 

  1. 将单词补充完整,就像下一行中的那样。之后按 键退出插入模式回到

     正常模式。

 

  1. 使用e 移动光标到下一步不完整的单词,重复步骤3和步骤4。

 

---> This li will allow you to pract appendi text to a line.

---> This line will allow you to practice appending text to a line.

 

提示:a、i 和 A 都会带您进入插入模式,惟一的区别在于字符插入的位置。

  

                    第六讲第三节:另外一个置换类命令的版本

  

** 输入大写的 R 可连续替换多个字符。**

 

1. 请将光标移动到本节中下面标记有---> 的第一行。移动光标到第一个 xxx 的

     起始位置。

 

2. 然后输入大写的 R 开始把第一行中的不同于第二行的剩余字符逐一输入,就

     可以全部替换掉原有的字符而使得第一行完全雷同第二行了。

 

3. 接着按<ESC> 键退出替换模式回到正常模式。您可以注意到尚未替换的文本

     仍然保持原状。

 

4. 重复以上步骤,将剩余的 xxx 也替换掉。

 

---> Adding 123 to xxx gives you xxx.

---> Adding 123 to 456 gives you 579.

 

提示:替换模式与插入模式相似,不过每个输入的字符都会删除一个已有的字符。

 

                          第六讲第四节:复制粘贴文本

  

使用操作符y 复制文本,使用 p 粘贴文本 1. 定位到下面标记有---> 的一行,将光标移动到"a)" 之后。

 

  1. 接着使用v 进入可视模式,移动光标到"first" 的前面。

 

  1. 现在输入y 以抽出(复制)高亮的文本。

 

  1. 然后移动光标到下一行的末尾:j$

 

  1. 接着输入 p 以放置(粘贴)复制了的文本。然后输入:a second

 

  1. 使用可视模式选中 " item.",用y 复制,再用 j$ 将光标移动到下一行末尾,

     用 p 将文本粘贴到那里。

 

--->  a) this is the first item.

      b)

 

  提示:您还可以把y 当作操作符来使用;例如yw 可以用来复制一个单词。

 

                            第六讲第五节:设置类命令的选项

  

** 设置可使查找或者替换可忽略大小写的选项 **

 

1. 要查找单词 ignore 可在正常模式下输入 /ignore <回车>。

     要重复查找该词,可以重复按n 键。

 

2. 然后设置 ic 选项(Ignore Case,忽略大小写),请输入: :set ic

 

3. 现在可以通过键入n 键再次查找单词 ignore。注意到 Ignore 和 IGNORE 现在

     也被找到了。

 

4. 然后设置 hlsearch 和incsearch 这两个选项,请输入: :set hls is

 

5. 现在可以再次输入查找命令,看看会有什么效果: /ignore <回车>

 

6. 要禁用忽略大小写,请输入: :set noic

 

提示:要移除匹配项的高亮显示,请输入:  :nohlsearch

提示:如果您想要仅在一次查找时忽略字母大小写,您可以使用 \c:

      /ignore\c <回车>

                               第六讲小结

 

  1. 输入小写的 o 可以在光标下方打开新的一行并进入插入模式。

     输入大写的 O 可以在光标上方打开新的一行。

 

  1. 输入小写的a 可以在光标所在位置之后插入文本。

     输入大写的 A 可以在光标所在行的行末之后插入文本。

 

  1. e 命令可以使光标移动到单词末尾。

 

  1. 操作符y 复制文本,p 粘贴先前复制的文本。

 

  1. 输入大写的 R 将进入替换模式,直至按 键回到正常模式。6. 输入:set xxx 可以设置xxx 选项。一些有用的选项如下:

        'ic' 'ignorecase'       查找时忽略字母大小写

        'is' 'incsearch'        查找短语时显示部分匹配

        'hls' 'hlsearch'        高亮显示所有的匹配短语

     选项名可以用完整版本,也可以用缩略版本。

 

  1. 在选项前加上no 可以关闭选项:  :set noic

 

                          第七讲第一节:获取帮助信息

  

** 使用在线帮助系统 **

 

Vim 拥有一个细致全面的在线帮助系统。要启动该帮助系统,请选择如下三种方

  法之一:

- 按下<HELP> 键 (如果键盘上有的话)

- 按下<F1> 键 (如果键盘上有的话)

- 输入  :help <回车>

 

  请阅读帮助窗口中的文字以了解帮助是如何工作的。

  输入 CTRL-W CTRL-W   可以使您在窗口之间跳转。

  输入 :q <回车> 可以关闭帮助窗口。

 

  提供一个正确的参数给":help"命令,您可以找到关于该主题的帮助。请试验以

  下参数(可别忘了按回车键哦):

 

        :help w

        :help c_CTRL-D

        :help insert-index

        :help user-manual

                          第七讲第二节:创建启动脚本

  

启用Vim 的特性 

 

Vim 的功能特性要比Vi 多得多,但其中大部分都没有缺省启用。为了使用更多的

  特性,您得创建一个vimrc 文件。

 

  1. 开始编辑vimrc 文件,具体命令取决于您所使用的操作系统:

        :edit ~/.vimrc          这是Unix 系统所使用的命令

        :edit $VIM/_vimrc       这是MS-Windows 系统所使用的命令

 

  1. 接着读取vimrc 示例文件的内容:

        :r $VIMRUNTIME/vimrc_example.vim

 

  1. 保存文件,命令为:

        :write

  下次您启动Vim 时,编辑器就会有了语法高亮的功能。

  您可以把您喜欢的各种设置添加到这个vimrc 文件中。

  要了解更多信息请输入 :help vimrc-intro

 

                            第七讲第三节:补全功能

  

** 使用CTRL-D 和<TAB> 可以进行命令行补全 **

 

1. 请确保Vim 不是在以兼容模式运行: :set nocp

 

2. 查看一下当前目录下已经存在哪些文件,输入: :!ls   或者  :!dir

 

3. 现在输入一个目录的起始部分,例如输入: :e

 

4. 接着按CTRL-D 键,Vim 会显示以e 开始的命令的列表。

 

5. 然后按<TAB> 键,Vim 会补全命令为:edit 。

 

6. 现在添加一个空格,以及一个已有文件的文件名的起始部分,例如: :edit FIL

 

7. 接着按<TAB> 键,Vim 会补全文件名(如果它是惟一匹配的)。

 

提示:补全对于许多命令都有效。您只需尝试按CTRL-D 和 <TAB>。

      它对于:help 命令非常有用。

 

                                  第七讲小结

  

  1. 输入:help 或者按 键或 键可以打开帮助窗口。

 

  1. 输入:help cmd 可以找到关于cmd 命令的帮助。

 

  1. 输入 CTRL-W CTRL-W  可以使您在窗口之间跳转。

 

  1. 输入:q 以关闭帮助窗口

 

  1. 您可以创建一个vimrc 启动脚本文件用来保存您偏好的设置。

 

  1. 当输入: 命令时,按CTRL-D 可以查看可能的补全结果。

     按 可以使用一个补全。

gcc学习笔记

title: gcc学习笔记
date: '2019-07-27 16:35:33'
updated: '2019-07-27 16:35:33'
tags: [linux, c]

permalink: /articles/2019/07/27/1564216533786.html

gcc的使用

  • 预处理(Preprocess)
  • 编译(Compilation)
  • 汇编(Assembly)
  • 链接(Linking)
1.预处理

对源程序中的伪指令(以#开头的指令)和特殊符号进行处理的过程。伪指令包括宏定义指令,条件编译指令和头文件包含指令,gcc对C源文件进行预处理之后,会输出.i文件。

  1. 删除所有#define,并且展开所有宏定义。
  2. 处理所有条件编译指令,如#if,#deif。
  3. 处理#include预编译指令,将被包含的文件插入指定位置,这个过程递归进行,被包含的文件还可能包含其他文件。
  4. 删除所有的注释。
  5. 添加行号和文件标识,便于产生调试用的行号信息,以及产生编译错误和警告时能够显示行号信息。
  6. 保留所有#pragma编译器指令,因为编译器需要他们。

预编译实例

gcc -E text.c -o text.i

2.编译

编译过程就是把预处理完的文件进行一系列词法分析,语法分析,,语义分析及优化后生成相应的汇编文件,默认不生成这个汇编文件,-S 选项输出汇编文件

编译实例

gcc -S text.i -o text.s

汇编语言是一种低级的通用编程语言

3.汇编

将汇编代码转变成机器可以执行的二进制代码,每一个汇编语句都对应着一条机器指令,汇编过程只是根据汇编指令和机器指令的对照表翻译汇编生成的文件后缀名为 .o

汇编实例

gcc -C text.s -o text.o

4.链接

解决多个文件之间的引用问题。

gcc text.o -o text

gcc 编译不需要C++库文件的C++程序

gcc text.cpp -o text

gcc编译需要C++库文件的C++程序

gcc text.cpp -l stdc++ -o text

gcc 常见选项

-x

2048小游戏开发

title: 2048小游戏开发
date: '2019-07-13 09:50:26'
updated: '2019-07-13 09:50:26'
tags: [linux, cpp]

permalink: /articles/2019/07/13/1562982626722.html

2048 小游戏文档

只有一个2048类
  • 暴露两个接口:构造函数 play函数
  • 游戏主体是一个4x4的二维数组
  • display函数展示这个二维数组,和一些提示信息
  • rand_map函数负责在数组中不是0的地方随机刷新2,有百分之二十的概率刷新的是4
  • key_process函数用来响应用户的按键,就是用户按下方向键,数字会移动
  • play函数根据游戏逻辑调用这些函数
  • full函数用来判断游戏区域是否还有空白,如果还有空白返回 1,没有空白返回0,没有空白意味着不能再随机刷新数字,等价于游戏结束,程序终止
  • up down left right 这四个函数实现了用户在按下了不同的方向键之后数字的移动
  • 构造函数实现了数组的初始化,并且调用rand_map在两个位置生成了两个数字(2 或者 4)
使用方法
#Linux平台  
g++ 2048.cpp main.cpp -o game  
./game

下面是代码

main.cpp
/*************************************************************************  
 > File Name: main.cpp  
 > Author:muyuan   
 > Mail: muyuanhuck@163.com  
 > Created Time: 2019年07月12日 星期五 08时36分59秒  
 ************************************************************************/  
​  
#include<iostream>  
#include "2048.h"  
using namespace std;  
​  
int main()  
{  
 _2048 game;  
 game.play();  
 return 0;  
}
2048.h
/*************************************************************************  
 > File Name: 2048.h  
 > Author:muyuan   
 > Mail: muyuanhuck@163.com  
 > Created Time: 2019年07月12日 星期五 08时36分38秒  
 ************************************************************************/  
​  
#ifndef _2048_H  
#define _2048_H  
#endif  
​  
#define N 4  
​  
class _2048  
{  
private:  
 int map[N][N];  
 int score;   
 void display();  
 void rand_map();  
 int key_process();  
 int full();  
 int up();  
 int down();  
 int left();  
 int right();  
public:  
 int play();  
 _2048();  
};  
​
2048.cpp
/*************************************************************************  
 > File Name: 2048.cpp  
 > Author: muyuan   
 > Mail: muyuanhuck@163.com  
 > Created Time: 2019年07月12日 星期五 08时36分30秒  
 ************************************************************************/  
#include <iostream>  
#include <iomanip>  
#include <ctime>  
//#include <cstdio>  
#include "2048.h"  
using namespace std;  
​  
_2048::_2048()  
{  
 score = 0;  
 for (int x = 0; x < N; x++)  
 {  
 for (int y = 0; y < N; y++)  
 {  
 map[x][y] = 0;  
 }  
 }  
 rand_map();  
 rand_map();  
}  
​  
void _2048::display()  
{  
 cout << "+----+----+----+----+" << endl;  
 for (int y = 0; y < N; y++)  
 {  
 for (int x = 0; x < N; x++)  
 {  
 if (map[y][x] == 0)  
 {  
 cout << "|" << setw(4) << " ";  
 }  
 else  
 cout << "|" << setw(4) << map[y][x];  
 }  
 cout << "|" << endl;  
 cout << "+----+----+----+----+" << endl;  
 }  
 cout << "+----+----+----+----+" << endl;  
 cout << "|    k              |" << endl;  
 cout << "|h<--+-->l          |" << endl;  
 cout << "|    j              |" << endl;  
 cout << "|请输入方向,q退出  |" << endl;  
 cout << "|  分数       " << setw(4) << score <<"  |" << endl;  
 cout << "+----+----+----+----+" << endl;  
}  
​  
void _2048::rand_map()  
{  
 srand(time(0));  
 int numx = rand();  
 numx = numx % 4;  
 int numy = rand();  
 numy = numy % 4;  
 //cout << numx << " " << numy << endl;  
​  
 int flag = rand();  
 flag = flag % 5;  
 if (flag > 3)  
 {  
 while (map[numy][numx] != 0)  
 {  
 numx = rand();  
 numx = numx % 4;  
 numy = rand();  
 numy = numy % 4;  
 }  
 map[numy][numx] = 4;  
 }  
 else  
 {  
 while (map[numy][numx] != 0)  
 {  
 numx = rand();  
 numx = numx % 4;  
 numy = rand();  
 numy = numy % 4;  
 }  
 map[numy][numx] = 2;  
 }  
}  
​  
int _2048::key_process()  
{  
 char c;  
 cout << "请输入方向" << endl;  
 //c = getchar();  
 //scanf("%*c");  
 cin >> c;  
 if (c == 'q')  
 {  
 cout << "quit" << endl;  
 return 0;  
 }  
 else if (c == 'h')  
 {  
 cout << "左" << endl;  
 left();  
 }  
 else if (c == 'j')  
 {  
 cout << "下" << endl;  
 down();  
 }  
 else if (c == 'k')  
 {  
 cout << "上" << endl;  
 up();  
 }  
 else if (c == 'l')  
 {  
 cout << "右" << endl;  
 right();  
 }  
 else  
 {  
 cout << "输入错误" << endl;  
 }  
 return c;  
}  
​  
int _2048::play()  
{  
 int flag = 1;  
 display();  
 while (flag)  
 {  
 flag = key_process();  
 if (flag == 'h' || flag == 'j' || flag == 'k' || flag == 'l')  
 {  
 rand_map();  
 display();  
 }  
 else  
 {  
 continue;  
 }  
 flag = full();  
 }  
}  
int _2048::full()  
{  
 int aflag = 0;  
 for (int y = 0; y < N; y++)  
 {  
 for (int x = 0; x < N; x++)  
 {  
 if(map[y][x] != 0)  
 {  
 aflag++;  
 }  
 }  
 }  
 if (aflag == 16)  
 {  
 return 0;  
 }  
 else   
 {  
 return 1;  
 }  
}  
int _2048::up()  
{  
 int x,y;  
 for (y = 3;y > 0;y--)  
 {  
 for(x = 0;x < 4; x++)  
 {  
 if(map[y-1][x] == 0)  
 {  
 map[y-1][x] =map[y][x];  
 map[y][x] = 0;  
 }  
 else  
 {  
 if(map[y-1][x] == map[y][x])  
 {  
 score +=map[y-1][x];  
 map[y-1][x] *=2;  
 map[y][x] = 0;   
 }  
 }  

 }  
 }  
}  
​  
int _2048::down()  
{  
 int x,y;  
 for (y = 0;y < 3;y++)  
 {  
 for(x = 0;x < 4; x++)  
 {  
 if(map[y+1][x] == 0)  
 {  
 map[y+1][x] =map[y][x];  
 map[y][x] = 0;  
 }  
 else  
 {  
 if(map[y+1][x] == map[y][x])  
 {  
 score +=map[y+1][x];  
 map[y+1][x] *=2;  
 map[y][x] = 0;   
 }  
 }  

 }  
 }  
}  
int _2048::left() //左  
{  
 int x,y;  
 for (x = 3;x > 0;x--)  
 {  
 for(y = 0;y < 4; y++)  
 {  
 if(map[y][x-1] == 0)  
 {  
 map[y][x-1] =map[y][x];  
 map[y][x] = 0;  
 }  
 else  
 {  
 if(map[y][x-1] == map[y][x])  
 {  
 score +=map[y][x-1];  
 map[y][x-1] *=2;  
 map[y][x] = 0;   
 }  
 }  

 }  
 }  
}  
int _2048::right()  
{  
 int x,y;  
 for (x = 0;x < 3;x++)  
 {  
 for(y = 0;y < 4; y++)  
 {  
 if(map[y][x+1] == 0)  
 {  
 map[y][x+1] =map[y][x];  
 map[y][x] = 0;  
 }  
 else  
 {  
 if(map[y][x+1] == map[y][x])  
 {  
 score +=map[y][x+1];  
 map[y][x+1] *=2;  
 map[y][x] = 0;   
 }  
 }  

 }  
 }  
}

‘非常抱歉,由于资金紧张,鸢尾花开源小组(code.muyuanhuck.cn)关闭 ‘

title: '非常抱歉,由于资金紧张,鸢尾花开源小组(code.muyuanhuck.cn)关闭 '
date: '2019-06-20 17:38:14'
updated: '2019-06-20 17:38:14'
tags: [待分类]

permalink: /code.muyuanhuck.cn

待资金充裕,人员齐备,我们会再一次扬帆起航!

讲个笑话

title: 讲个笑话
date: '2019-06-09 18:46:15'
updated: '2019-06-09 18:46:15'
tags: [笑话]

permalink: /articles/2019/06/09/1560077175238.html

小的时候,为了烤几个红薯吃,我在村东头生了一堆火。
该死的风把火苗吹向了二伯家的草垛,烧着了,火势迅速大了起来,熊熊浓烟冲天而起。
马上有人敲着脸盆报警,全村人都从地里扔了锄头赶了回来,拎着水桶端着脸盆呐喊着扑救,个个跑的水花四溅,连几个孩子都拿着饭碗和夜壶灌水去泼。
但都无济于事,草垛很快化为一大堆灰烬。
我当场就被二伯和老爸揍的鼻青脸肿,几个半生的红薯也被扔进了红红的余烬里面。
大人等着没有明火后都走了,我警惕的环顾了一下四周,确认没人,用大棍拨弄灰烬去找那几个红薯。
都熟透透了,擦擦眼泪,烫的嘴左右歪着呼呼哈哈吃的正香,拨散的火星见风又着了,顺着地上野草蔓延,特么的又烧着了一个草垛。
那些人回家刚换了衣服,都嚷着咋搞的,急吼吼的又来泼水救火。
我吓得溜进了大竹林,还是被揪了出来,深秋已经很冷了,老爸不知冻的还是气的,浑身湿淋淋的,抖索着两腿说没劲了怕打不疼,让二伯亲手代打。
打的太狠了,屁股都肿了,一边打一边还对着小伙伴们说:看到没?以后谁敢放火,这就是下场!
身上疼了半个月,那时还小,没意识到自己犯了大错,就想着咋样让二伯吃点苦头再说。
一天我拿着被弟弟拉上翔的大洗澡盆,在二伯承包的鱼塘里洗,看看左右无人,就坐进盆里看会不会沉下去。
没想到直径一米左右的大盆像个小船一样,居然可以载着我飘浮,弄个大棍一撑,晃晃悠悠的飘到池塘中间了。
黑塑料盆厚实,飘的也稳,我站了起来,大棍作桨左右划动,玩的不亦乐乎。
那一刻,忽然想到了露天电影的鬼故事,一下有了个整蛊计划……
二伯每天凌晨三四点都会在鱼塘电鱼上来卖,雷打不动。
那天凌晨,我悄不声的出了门,拿出了大塑料盆,又偷了老妈剪下来准备卖的长头发,趁着朦胧月色到了池塘边。
坐进了大盆划进了树萌遮盖的阴暗处,把那个上头扎好的长发往头上一戴,披肩了,又拿出老爸的红内裤叼着当长舌头,静静的等二伯出来。
正在静候,竹林窸窣作响,一个黑影走了出来,我吓得一激灵,难道遇上真鬼了?
我划着皮盆飘到池塘中间,扭头一看,是个偷鱼的,他已经下了水,一看池塘中间一个长发披肩吊着红舌头的站着,皮盆几乎是淹住的,他看不见脚下有任何东西,吓得忽隆隆就从水里往上跑。
水岸交接处有陡坡,泥滑,他没扒住,手舞足蹈,两脚滑的风火轮般原地踏了一阵,还是摔倒了,一声脆响,陡坡泥中如刀的河蚌壳割破了他的脸,那人惨叫几声跑了。
二伯刚好也出来了,听到响声惊问:谁?!陡然看到池塘中间一个长发吊舌鬼,他不停的甩着脑袋以为看错了。
那会我没心吓他了,用长棍戳着水里淤泥用力一撑,皮盆迅速往阴暗处驶去。
二伯一看真会移动,吓的一声嚎叫引吠了全村的狗。
他扭头就跑,一下撞到了自家门口的石墎子,腿瘸了,随手拿起门口的长竹竿往水塘里打。
离那么远,怎么可能打的到,正在暗笑,耳朵一阵剧疼。
原来那竹竿是堂哥的钓鱼杆,玛逼长长的线带着鱼钩,竟然钩住了我的耳朵边。
他一回扯,我差点被拉下了水,皮盆被疾速带向他所在的岸边,一撞水面,沉了。
我疼的冒了虚汗,腾手去扯鱼线,二伯不清楚那是鱼竿,以为鬼凌空吸住了,又平移着到岸边,以为追他,丢了鱼竿撞开门,拖着瘸腿爬进去了。
我耳朵上挂着鱼钩,一跑,拖着鱼竿太疼了,就想把鱼钩取下来。
钩是带倒刺的,取不掉,扯的血糊滋拉的,正在拽着,二伯家沸腾了,就听见二婶破口大骂:你要死了吗?!怎么爬到床上尿啊?……
二伯语无伦次叫喊:…没~没憋住…有鬼…有鬼啊……
二婶嚷了起来:老眼昏花的,又看错了吧?我去看看!
我一惊,用手揪着鱼线,拖着长棍跑进竹林,那棍子晃悠悠的左右摆动,棍头和线交接处一下挂在一根竹子上,嗞的一下钩豁了耳朵。
我疼的眼泪射了出来,捂着耳朵蹦了几圈,哭着钻出了竹林。
上衣血了不少,就跑到水库边脱下洗了洗,起身哭着想往家回。
水库边是堂爷爷家,老年人尿频,正在大门口呼呼啦啦撒尿,一看月光下的水里钻出来个长发遮面的,还低声的哭,捏着工具的手乱晃起来,那尿瞬间甩的画地图一样。
他转身就往屋里跑,一脚绊在门槛上栽倒在地。
堂爷爷年纪大,我没想到头发没摘掉,跑着想去扶,他一转身看见还撵来了,咣当一声关了门栓上,在里面嚎啕大哭起来……
我赶紧回了家,忍着疼痛沮丧的睡了。
第二天村里沸腾了,二伯说池塘里多年前淹死的小孩出来了,堂爷爷也拿着摔掉的两颗门牙做证,一时间人心惶惶。
耳朵上有伤,我弄了个帽子歪戴着,借口害怕,要去不远的外婆家住几天。
半夜翻墙我溜出了外婆家,偷偷从竹林下钻进了池塘边,想把水里的皮盆捞上来。
猛一抬头,看到岸上亮着一排灯,一个道士正坐着闭眼念念有词。
原来二伯请了道士超度亡魂,我止住脚步,正想溜走,那道士舞起木剑,边烧着纸边顺着塘坎走了过来。
纸有亮光,跑来不及了,急的不顾水冷,一下溜进池塘,露了半个脑袋希望他快些走过去。
道士听见水响,吓了一跳,瞅瞅又没人,抖索着念念道:对不起…对不起,转完这圈马上走,马上走…太上老君急急如律令…嘛呢哄…嘛呢哄……,说着开始快速加快了脚步。
斜陡坡滑呀,他哧溜一下掉进水里,那边是深水区,他貌似不会水,一边扑腾一边喊着救命,我一看事大了,捞起皮盆弯腰顶着盆沿就跑。
怕他淹死,捡起岸边的灯照二伯关闭的门上一摔,噔噔噔回到家门口,把皮盆往猪圈一扔,又跑回外婆家去了。
………………
几天后,村里开了会,按着在医院抢救的道士所讲,在池塘边盖了一座小庙,里面供奉着那个淹死的小孩灵位,旁边还有那道士所说的乌龟精。估计是偷鱼贼不敢来了,当年村里鱼产量多了一倍,香火一下旺盛起来…

泠鸢

title: 泠鸢
date: '2019-06-30 11:48:53'
updated: '2019-06-30 11:48:53'
tags: [待分类]

permalink: /articles/2019/06/30/1561866533840.html

泠鸢一到店,所有听歌的人便都看着她笑,有的叫道:“泠鸢,你又出新歌了!”她不回答,对柜里说:“拿两瓶可乐,加一包辣条。”便排出九元大钱。他们又故意的高声嚷道:“你一定又去当色情主播了!”泠鸢睁大眼睛说:“你怎么这样凭空污人清白……”
“什么清白?我们亲耳听到你唱的本色。”泠鸢便涨红了脸,额上的青筋条条绽出,争辩道:“读书人的事,能叫色吗?”接连便是难懂的话,什么“冷鸟一米四”,什么“幼女控”之类,引得众人都哄笑起来,店内外充满了快活的空气。