VIM-神器打造实例


微软内部最受欢迎的编辑器是什么么?还在用Ctrl+f勾选"正则表达式"进行review替换么?  你真的out了   还在用代码提示来安慰自己的么?你的智商真的下降得不行了。。 什么是程序员最后的武器  vc6?vim?emacs?editplus?eclipse?

笑而不语  没有最好 只有最强

VIM基本命令

  1. VI常用实用命令学习    
  2. 目标:[通过此练习学习通够利用VI编辑器,对系统配置文件进行修改或编写简单的脚本程序]  
  3.   
  4. 命令行或命令模式:在最后一行没有显示--INSERT--或--REPLACE--字样的时候。  
  5.   
  6. #:   是指常用的命令  
  7.   
  8. 一般模式:光标移动  
  9. h 或 ->     光标向左移动一个字符  
  10. ------------------------------------------------------------  
  11. l 或 <-     光标向右移动一个字符  
  12. ------------------------------------------------------------  
  13. k 或 向上方向键    光标向上移动一个字符  
  14. ------------------------------------------------------------  
  15. j 或 向下方向键    光标向下移动一个字符  
  16. ------------------------------------------------------------  
  17. Ctrl+f         #  屏幕向前翻动一页  
  18. --------------------------------------------------------  
  19. Ctrl+b         #  屏幕向后翻动一页  
  20. --------------------------------------------------------  
  21. Ctrl+d     屏幕向前翻动半页  
  22. --------------------------------------------------------  
  23. Ctrl+u     屏幕向后翻动半页  
  24. --------------------------------------------------------  
  25. +     光标移动到非空格符的下一列  
  26. ------------------------------------------------------------------  
  27. -     光标移动到非空格符的上一列  
  28. -------------------------------------------------------------------  
  29. n    按下数字键后再按空格键,光标会向右移动这一行的n个字符。  
  30.      (例如20,则光标会向右移动20个字符)  
  31. ----------------------------------------------------------------------------------------------  
  32. 0        #   (这是数字0)移动到这一行的第一个字符处  
  33. -----------------------------------------------------------------------------  
  34. $        #   移动到这一行的最后一个字符处  
  35. --------------------------------------------------------------------  
  36. H     光标移动到这个屏幕最上方的那一行  
  37. ------------------------------------------------------------------------  
  38. M     光标移动到这个屏幕中央的那一行  
  39. ----------------------------------------------------------------------  
  40. L     光标移动到这个屏幕最下方的那一行  
  41. ------------------------------------------------------------------------  
  42. G        #   移动到这个文件的最后一行  
  43. ----------------------------------------------------------------  
  44. nG     移动到这个文件的第n行。  
  45.      例如20G,则会移动到这个文件的第20行(可配合:set nu)  
  46. ----------------------------------------------------------------------------------------------  
  47. n       #   光标向下移动n行  
  48. -------------------------------------------------------  
  49.   
  50.   
  51. 一般模式:查找与替换  
  52.   
  53. /word        #   在光标之后查找一个名为word的字符串  
  54. --------------------------------------------------------------------------  
  55. ?word     在光标之前查找一个名为word的字符串  
  56. --------------------------------------------------------------------------  
  57. :n1,n2s/word1/word2/g      #   在第n1与n2行之间查找word1这个字符串,并将该字符串替换为word2  
  58. ----------------------------------------------------------------------------------------------------  
  59. :1,$s/word1/word2/g      #   从第一行到最后一行查找word1字符串,并将该字符串替换为word2  
  60. --------------------------------------------------------------------------------------------------  
  61. :1,$s/word1/word2/gc      #   从第一行到最后一行查找word1字符串,并将该字符串替换为word2,  
  62.      且在替换前显示提示符让用户确认(confirm)  
  63. ---------------------------------------------------------------------------------------------------  
  64.   
  65.   
  66. 一般模式:删除、复制与粘贴  
  67.   
  68. x,X        #   x为向后删除一个字符,X为向前删除一个字符  
  69. --------------------------------------------------------------------------------  
  70. nx     向后删除n个字符  
  71. -------------------------------------------------------  
  72. dd        #   删除光标所在的那一整行    
  73. --------------------------------------------------------------  
  74. ndd        #   删除光标所在列的向下n列,例如,20dd则是删除20列  
  75. ---------------------------------------------------------------------------------------  
  76. d1G     删除光标所在行到第一行的所有数据  
  77. ------------------------------------------------------------------------  
  78. dG     删除光标所在行到最后一行的所有数据  
  79. --------------------------------------------------------------------------  
  80. yy        #   复制光标所在行  
  81. ------------------------------------------------------  
  82. nyy        #   复制光标所在列的向下n列,例如,20yy则是复制20列  
  83. ---------------------------------------------------------------------------------------  
  84. y1G     复制光标所在列到第一列的所有数据  
  85. ------------------------------------------------------------------------  
  86. yG     复制光标所在列到最后一列的所有数据  
  87. --------------------------------------------------------------------------  
  88. p,P        #   p为复制的数据粘贴在光标下一行,P为粘贴在光标上一行  
  89. ------------------------------------------------------------------------------------------  
  90. J     将光标所在列与下一列的数据结合成一行  
  91. -----------------------------------------------------------------------------  
  92. u        #   恢复前一个动作  
  93. ------------------------------------------------------  
  94.   
  95.   
  96.   
  97. 编辑模式:  
  98.   
  99. i,I        #   插入:在当前光标所在处插入输入的文字,已存在的字符会向后退  
  100. --------------------------------------------------------------------------------------------------  
  101. a,A        #   添加:由当前光标所在处的下一个字符开始输入,已存在的字符会向后退  
  102. -------------------------------------------------------------------------------------------------------  
  103. o,O        #   插入新的一行:从光标所在处的下一行行首开始输入字符  
  104. ------------------------------------------------------------------------------------------  
  105. r,R        #   替换:r会替换光标所指的那一个字符;R会一直替换光标所指的文字,直到按下Esc为止  
  106. ---------------------------------------------------------------------------------------------------------------------  
  107. Esc        #   退出编辑模式,回到一般模式  
  108. ------------------------------------------------------------------  
  109.   
  110.   
  111. 命令行模式:  
  112.   
  113. :w        #   将编辑的数据写入硬盘文件中  
  114. ------------------------------------------------------------------  
  115. :w!     若文件属性为只读,强制写入该文件  
  116. ------------------------------------------------------------------------  
  117. :q        #   退出vi  
  118. ----------------------------------------------  
  119. q!     若曾修改过文件,又不想保存,使用!为强制退出不保存文件  
  120. ---------------------------------------------------------------------------------------------  
  121. :wq        #   保存后退出,若为:wq!,则为强制保存后退出  
  122. ---------------------------------------------------------------------------------  
  123. :w[filename]    将编辑数据保存为另一个文件(类似另存为新文档):x也是保存  
  124. ------------------------------------------------------------------------------------  
  125. :r[filename]    在编辑的数据中,读入另一个文件的数据,亦即将filename这个文件内容加到光标所在行的后面  
  126. ----------------------------------------------------------------------------------------------------------------------------  
  127. :set nu     显示行号,设定之后,会在每一行的前面显示该行的行号  
  128. ------------------------------------------------------------------------------------------  
  129. :set nonu    与set nu相反,为取消行号  
  130. ----------------------------------------------------------------  
  131. n1,n2w[filename]   将n1到n2的内容保存为filename这个文件  
  132. ----------------------------------------------------------------------------  
  133.   
  134. 练习:  
  135. 1.请在/root目录下建立一个名为supxmen的目录;  
  136. 2.进入supxmen目录中;  
  137. 3.将/etc/man.config复制到本目录下;  
  138. 4.使用vi开启本目录下的man.config文件;  
  139. 5.在vi中设定行号.  
  140. 6.移动到第63行,向右移动29个字符,请问您在双引号中看到的是什么目录?  
  141. 7.移到第一行,并且向下搜寻teTeX字符串,请问它在第几行?  
  142. 8.接下来,将50100行之间的man改为MAN,要求是逐个查找修改,请问如何输入指令?  
  143. 9.修改完后,突然反悔,要全部复原,有哪些方法?  
  144. 10.复制5160行这10行的内容,并且粘贴到最后一行之后;  
  145. 11.删除1130行之间的20行内容;  
  146. 12.将这个文件另存为文件名为man.supxmen.config的文件;  
  147. 13.转到第29行,并且删除15个字符;  
  148. 14.请问目前的文件有多少行,多少字符?  
  149. 15.保存后退出.  
  150. 答案是:134 3846  

Mysql一分钟 掌握  只需要 1分钟 超过一分钟 对不起 你更适合用mssql 傻瓜配置管理器!

  1. 格式:mysql -h 远程主机地址 -u 用户名 -p 回车   
  2. 输入密码进入:   
  3.   
  4. mysql -u root -p 回车   
  5. Enter password: ,输入密码就可以进入   
  6. mysql> 进入了   
  7. 退出命令:>exit 或者ctrl+D   
  8.   
  9. 二,MySQL管理与授权   
  10. 1.修改密码:   
  11. 格式:mysqladmin -u 用户名 -p 旧密码 password 新密码   
  12.   
  13. 2.增加新用户:   
  14. >grant create,select,update....(授予相关的操作权限)   
  15. ->on 数据库.*   
  16. -> to 用户名@登录主机 identified by '密码'   
  17.   
  18. 操作实例:   
  19.   
  20. 给root用户添加密码:   
  21. # mysqladmin -u root password bkjia   
  22. 因为开始root没有密码,所以-p旧密码一项可以省略.   
  23. 登陆测试:   
  24. # mysql -u root -p 回车   
  25. 输入密码,成功登陆.   
  26.   
  27.   
  28. 将原有的mysql管理登陆密码bkjia改为bkjia.net.   
  29. # mysqladmin -u root -p bkjia password 'bkjia.net'   
  30.   
  31. 创建数据库添加用户并授予相应的权限:   
  32. mysql> create database phpbb;   
  33. Query OK, 1 row affected (0.02 sec)   
  34.   
  35. mysql> use phpbb;   
  36. Database changed   
  37. mysql> grant create,select,update,insert,delete,alter   
  38. -> on phpbb.*   
  39. -> to phpbbroot@localhost identified by 'bkjia';   
  40. Query OK, 0 rows affected (0.00 sec)   
  41.   
  42. 授予所有的权限:   
  43. >grant all privileges   
  44. >on bbs.*   
  45. >to bbsroot@localhost identified by 'bkjia'   
  46.   
  47. 回收权限:   
  48. revoke create,select,update,insert,delete,alter   
  49. on phpbb.*   
  50. from phpbbroot@localhost identified by 'bkjia';   
  51.   
  52. 完全将phpbbroot这个用户删除:   
  53. >use mysql   
  54. >delete from user   
  55. where user='phpbbroot' and host='localhost';   
  56. >flush privileges; 刷新数据库   
  57.   
  58. 三,数据库简单操作   
  59. 1.显示数据库列表:   
  60. >show databases;   
  61. mysql   
  62. test   
  63. 2.使其成为当前操作数据库   
  64. >use mysql; 打开数据库.   
  65. >show tables; 显示mysql数据库中的数据表.   
  66. 3.显示数据表的表结构:   
  67. >describe 表名;   
  68. >describe user; 显示user表的表结构:   
  69. 4.创建数据库,建表   
  70. >create database 数据库名;   
  71. >use 数据库名;   
  72. >create table 表名(字段设定列表)   
  73. 5.删除数据库,册除表   
  74. >drop database 数据库名;   
  75. >drop table 表名;   
  76. 6.显示表中的记录;   
  77. select * from 表名;   
  78. 7.修改数据库结构:   
  79. 增加字段:   
  80. alter table dbname add column <字段名><字段选项>   
  81. 修改字段:   
  82. alter table dbname change <旧字段名> <新字段名><选项>   
  83. 删除字段:   
  84. alter table dbname drop column <字段名>   
  85.   
  86. 实例操作:   
  87. >create database office;   
  88. >use office;   
  89. mysql> create table personal(   
  90. -> member_no char(5) not null,   
  91. -> name char(,   
  92. -> birthday date,   
  93. -> exam_score tinyint,   
  94. -> primary key(member_no)   
  95. -> );   
  96. Query OK, 0 rows affected (0.01 sec)   
  97. >desc personal; 显示表结构:   
  98. +------------+------------+------+-----+---------+-------+   
  99. | Field | Type | Null | Key | Default | Extra |   
  100. +------------+------------+------+-----+---------+-------+   
  101. | member_no | char(5) | | PRI | | |   
  102. | name | char( | YES | | NULL | |   
  103. | birthday | date | YES | | NULL | |   
  104. | exam_score | tinyint(4) | YES | | NULL | |   
  105. +------------+------------+------+-----+---------+-------+   
  106. 4 rows in set (0.00 sec)   
  107.   
  108. insert into personal values ('001','netseek','1983-03-15','95');   
  109. insert into personal values ('002','heihei','1982-02-24','90');   
  110. insert into personal values ('003','gogo','1985-05-21','85');   
  111. insert into personal values ('004','haha','1984-02-25','84');   
  112. insert into personal values ('005','linlin','1982-04-28','85');   
  113. insert into personal values ('006','xinxin','1985-03-15','75');   
  114.   
  115. mysql> select * from personal;   
  116. +-----------+---------+------------+------------+   
  117. | member_no | name | birthday | exam_score |   
  118. +-----------+---------+------------+------------+   
  119. 001 | netseek | 1983-03-15 | 95 |   
  120. 002 | heihei | 1982-02-24 | 90 |   
  121. 003 | gogo | 1985-05-21 | 85 |   
  122. 004 | haha | 1984-02-25 | 84 |   
  123. 005 | linlin | 1982-04-28 | 85 |   
  124. 006 | xinxin | 1985-03-15 | 75 |   
  125. +-----------+---------+------------+------------+   
  126.   
  127. 修改数据库表:   
  128. 要求: 在birthday这后增加一个为height的字段,数据类型为tinyint.   
  129. 将字段exam_score 改名为scores,数据类型不变   
  130. >alter table personal   
  131. ->add column height tinyint after birthday,   
  132. ->change column exam_score scores tinyint;   
  133.   
  134. mysql> select * from personal;   
  135. +-----------+---------+------------+--------+--------+   
  136. | member_no | name | birthday | height | scores |   
  137. +-----------+---------+------------+--------+--------+   
  138. 001 | netseek | 1983-03-15 | NULL | 95 |   
  139. 002 | heihei | 1982-02-24 | NULL | 90 |   
  140. 003 | gogo | 1985-05-21 | NULL | 85 |   
  141. 004 | haha | 1984-02-25 | NULL | 84 |   
  142. 005 | linlin | 1982-04-28 | NULL | 85 |   
  143. 006 | xinxin | 1985-03-15 | NULL | 75 |   
  144. +-----------+---------+------------+--------+--------+   
  145.   
  146. 给表中插入数据:   
  147. >update personal set scores=95+5 where name='netseek';   
  148. >select scores from personal where name='netseek';   
  149. +--------+   
  150. | scores |   
  151. +--------+   
  152. 100 |   
  153. +--------+   
  154.   
  155. 删除表名字为'gogo'所有的信息中的的:   
  156. > delete from personal where name='gogo';   
  157.   
  158. 册除数据库中的表:   
  159. mysql>drop table if exists personal;   
  160.   
  161. 三,数据库的导入与导出   
  162. 导出:   
  163. 使用select into outfile 'filename'语句   
  164. 使用mysqldump实用程序   
  165. 使用select into outfile 'filename'语句   
  166.   
  167. 1.只能处理单个表,输出文件只有数据,没有表结构   
  168. 我们要将office,其中有一个表为personal,现在要把personal卸成文本文件out.txt:   
  169. >use office;   
  170. >select * from personal into outfile 'out.txt'; 可以看在/var/lib/mysql/office/目录下有out.txt   
  171. select * from personal into outfile './out.txt'; 可以看在out.txt 在/var/lib/mysql/目录下用out.txt   
  172.   
  173. 2.使用mysqldump实用程序(可以轻松处理多个表)   
  174. # cd /var/lib/mysql   
  175. 导出建立相关表的建表命令和插入指令   
  176. # mysqldump bbs >bbs.sql 将数据库bbs导入到bbs.sql中   
  177.   
  178. 如果要将bbs.sql导入数据库可以使用:   
  179. mysql> create database bbstest; 先建立一个名为office 的数据库.   
  180. # mysql bbstest <bbs.sql (这个常用在将本地的数据库文件传到服务器上,再导入到数据库中)   
  181.   
  182. 只想导出建表指令:   
  183. # mysqldump -d bbs >bbscreate.sql   
  184. 只想导出插入数据的sql指令:   
  185. # mysqldump -t bbs >bbsinsert.sql   
  186. 同时导出数据库中建表指令和表中的数据:   
  187. # mysqldump -T./ bbs cdb_admingroups (其中./表示当前目录,cdb_admingroups为bbs数据库其中的一个表)   
  188. #ls   
  189. cdb_admingroups.sql 导出了建表指令   
  190. cdb_admingroups.txt 导出了表中的数据   
  191.   
  192. 导入:   
  193. 从文件中加载数据库:   
  194. mysql>load data infile "/tmp/name.txt" into table names;   
  195. mysql>select * from names;   
  196.   
  197.   
  198. 四,数据库备份   
  199.   
  200. 1.手动拷贝备份:   
  201. MySQL数据库的文件保存在目录/var/lib/mysql中,数据库为每个库建立一个目录,所有的数据库文件都在这些目录中.   
  202. [root@www.bkjia.com mysql]#ls   
  203. bbs mysql mysql.sock phpbb test office 显示其中的数据库.   
  204.   
  205. 如果我们要将现在的数据库目录备份为mysql.bak .   
  206. [root@www.bkjia.com lib]# cp -rf mysql mysql.bak   
  207. 如果数据库遭到了破坏,现在要将数据库恢复:   
  208. [root@www.bkjia.com lib]# cp -rf mysql.bak/* mysql   
  209. 恢复数据库以后,var/lib/mysql中的文件已改变了,要更改文件的所属权限必须改变MySQL数据库的用户读写权限。   
  210. 所以我们得启动和运行mysql,并登陆数据库:   
  211. [root@www.bkjia.com lib]# /etc/init.d/mysqld start   
  212. [root@www.bkjia.com lib]# mysql -u root -p   
  213. Enter password:输入密码成功登陆.   
  214. mysql> show databses;   
  215.   
  216. 2.利用mysqldump来备份数据库   
  217. [root@www.bkjia.com mysql]# mysqldump --opt bbs -u root -p > bbs.sql   
  218. Enter password:   
  219. 注:--opt添加备份的其它选项,bb为其中一个数据库名,   
  220. 上面的意思是:使用重定向输出将备份写入到文件bb.sql中.   
  221. [root@www.bkjia.com mysql] #less bbs.sql   
  222.   
  223. 如果要恢复bb这个数据库,则进行如下操作:   
  224. [root@www.bkjia.com mysql] #mysql bbs -u root -p < bbs.sql   
  225.   
  226. 如果要备份所有数据库:   
  227. [root@www.bkjia.com mysql] #mysqldump --opt --all-databases -u root -p >mysql.bak   
  228. Enetr password:输入密码即可   
  229. 恢复所有数据库,不用输入数据库的名字:   
  230. [root@www.bkjia.com mysql] #mysql -u root -p < mysql.bak   
  231. Enetr password: 输入密码即可   
  232.   
  233. 五,附:MySQL密码忘记了怎么办?  
  234. 如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。   
  235. 启动 MySQL :bin/safe_mysqld --skip-grant-tables &   
  236. 就可以不需要密码就进入 MySQL 了。  
  237. 然后就是   
  238. >use mysql  
  239. >update user set password=password("new_pass") where user="root";  
  240. >flush privileges;  
  241. 重新杀 MySQL ,用正常方法启动 MySQL 。  

相关内容