ERROR 1442 (HY000): Can't update table '...' in stored function/trigger because it is already used

Mysqlliuliangsong 发表了文章 • 0 个评论 • 164 次浏览 • 2016-12-22 16:31 • 来自相关话题

一、MySQL错误现象:MySQL执行创建的触发器时,报如下错误:ERROR 1442 (HY000): Can't update table 'tmp' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
 下面为错误触发器的创建过程:1、创建测试表格:drop table if exists tmp;
create table tmp (id int, n1 int, n2 int);
insert tmp values(1, 10, 50);

MariaDB [test]> select * from tmp;
+------+------+------+
| id | n1 | n2 |
+------+------+------+
| 1 | 10 | 50 |
+------+------+------+
1 row in set (0.01 sec)2、创建一个MySQL触发器:DELIMITER $
drop trigger if exists tmp_update$
create trigger tmp_update
after update on tmp
for each row
begin
update tmp set n2=n1*5 where id=new.id;
end$
DELIMITER ;3、测试触发效果:mysql> select * from tmp;
+------+------+------+
| id | n1 | n2 |
+------+------+------+
| 1 | 10 | 50 |
+------+------+------+
1 row in set (0.00 sec)

mysql> update tmp set n1=2 where id=1;
ERROR 1442 (HY000): Can't update table 'tmp' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 二、错误原因:  这是由于MySQL触发器,触发事件的表与触发更新的表是用一表。触发更新同一表时,不应该使用update语句更新,应该使用set修改NEW对象更新即可。
 三、解决方案:1、将触发器的创建SQL语句改成如下并执行创建即可:DELIMITER $
drop trigger if exists tmp_update$
create trigger tmp_update
before update on tmp -- 更新之前执行,这样才能在NEW插入到数据库之前,修改NEW.n2
for each row
begin
set new.n2 = new.n1*5; -- 直接修改new.n2
end$
DELIMITER ; 触发器测试效果:aiezu.com> select * from tmp;
+------+------+------+
| id | n1 | n2 |
+------+------+------+
| 1 | 10 | 50 |
+------+------+------+
1 row in set (0.00 sec)

aiezu.com> update tmp set n1=12 where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

aiezu.com> select * from tmp;
+------+------+------+
| id | n1 | n2 |
+------+------+------+
| 1 | 12 | 60 |
+------+------+------+
1 row in set (0.00 sec) 查看全部

一、MySQL错误现象:

MySQL执行创建的触发器时,报如下错误:
ERROR 1442 (HY000): Can't update table 'tmp' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

 下面为错误触发器的创建过程:

1、创建测试表格:

drop table if exists tmp;
create table tmp (id int, n1 int, n2 int);
insert tmp values(1, 10, 50);

MariaDB [test]> select * from tmp;
+------+------+------+
| id | n1 | n2 |
+------+------+------+
| 1 | 10 | 50 |
+------+------+------+
1 row in set (0.01 sec)

2、创建一个MySQL触发器:

DELIMITER $
drop trigger if exists tmp_update$
create trigger tmp_update
after update on tmp
for each row
begin
update tmp set n2=n1*5 where id=new.id;
end$
DELIMITER ;

3、测试触发效果:

mysql> select * from tmp;
+------+------+------+
| id | n1 | n2 |
+------+------+------+
| 1 | 10 | 50 |
+------+------+------+
1 row in set (0.00 sec)

mysql> update tmp set n1=2 where id=1;
ERROR 1442 (HY000): Can't update table 'tmp' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
 

二、错误原因:

  这是由于MySQL触发器,触发事件的表与触发更新的表是用一表。触发更新同一表时,不应该使用update语句更新,应该使用set修改NEW对象更新即可。
 

三、解决方案:

1、将触发器的创建SQL语句改成如下并执行创建即可:
DELIMITER $
drop trigger if exists tmp_update$
create trigger tmp_update
before update on tmp -- 更新之前执行,这样才能在NEW插入到数据库之前,修改NEW.n2
for each row
begin
set new.n2 = new.n1*5; -- 直接修改new.n2
end$
DELIMITER ;
 触发器测试效果:
aiezu.com> select * from tmp;
+------+------+------+
| id | n1 | n2 |
+------+------+------+
| 1 | 10 | 50 |
+------+------+------+
1 row in set (0.00 sec)

aiezu.com> update tmp set n1=12 where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

aiezu.com> select * from tmp;
+------+------+------+
| id | n1 | n2 |
+------+------+------+
| 1 | 12 | 60 |
+------+------+------+
1 row in set (0.00 sec)

ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist

Mysqlliuliangsong 发表了文章 • 0 个评论 • 269 次浏览 • 2016-12-22 16:08 • 来自相关话题

一、MySQL错误现象:  执行创建的存储过程或者触发器报:ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist 二、错误原因:  这样由于创建存储过程或者触发器时间,指定的DEFINER为'root'@'%',而在MySQL的权限表(mysql.user)中,并不存在相关的user和host:mysql> select host,user,password from mysql.user;
+-------------------------+------+----------+
| host | user | password |
+-------------------------+------+----------+
| localhost | root | |
| aiezu | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| aiezu | | |
+-------------------------+------+----------+ 三、解决方案:  执行下面SQL语句,为'root'@'%'授权即可:grant all privileges on *.* to 'root'@'%' identified by ".";
flush privileges;

select host,user,password from mysql.user; 
执行效果: 查看全部

一、MySQL错误现象:

  执行创建的存储过程或者触发器报:
ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist
 

二、错误原因:

  这样由于创建存储过程或者触发器时间,指定的DEFINER'root'@'%',而在MySQL的权限表(mysql.user)中,并不存在相关的userhost
mysql> select host,user,password from mysql.user;
+-------------------------+------+----------+
| host | user | password |
+-------------------------+------+----------+
| localhost | root | |
| aiezu | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| aiezu | | |
+-------------------------+------+----------+
 

三、解决方案:

  执行下面SQL语句,为'root'@'%'授权即可:
grant all privileges on *.* to 'root'@'%' identified by ".";
flush privileges;

select host,user,password from mysql.user;
 
执行效果:
mysql_error_1449_hy000.png

MySQL触发器用法详解

Mysqlliuliangsong 发表了文章 • 0 个评论 • 395 次浏览 • 2016-12-22 10:53 • 来自相关话题

一、MySQL触发器创建:1、MySQL触发器的创建语法:CREATE [DEFINER = { 'user' | CURRENT_USER }] 
TRIGGER trigger_name
trigger_time trigger_event
ON table_name
FOR EACH ROW
[trigger_order]
trigger_body 2、MySQL创建语法中的关键词解释:字段含义可能的值DEFINER=可选参数,指定创建者,默认为当前登录用户(CURRENT_USER);
该触发器将以此参数指定的用户执行,所以需要考虑权限问题;DEFINER='root@%'
DEFINER=CURRENT_USERtrigger_name触发器名称,最好由表名+触发事件关键词+触发时间关键词组成; trigger_time触发时间,在某个事件之前还是之后;BEFORE、AFTERtrigger_event触发事件,如插入时触发、删除时触发;
  INSERT:插入操作触发器,INSERT、LOAD DATA、REPLACE时触发;
  UPDATE:更新操作触发器,UPDATE操作时触发;
  DELETE:删除操作触发器,DELETE、REPLACE操作时触发;INSERT、UPDATE、DELETEtable_name 触发操作时间的表名; trigger_order可选参数,如果定义了多个具有相同触发事件和触法时间的触发器时(
如:BEFORE UPDATE),默认触发顺序与触发器的创建顺序一致,可以
使用此参数来改变它们触发顺序。mysql 5.7.2起开始支持此参数。
  FOLLOWS:当前创建触发器在现有触发器之后激活;
  PRECEDES:当前创建触发器在现有触发器之前激活;FOLLOWS、PRECEDEStrigger_body触发执行的SQL语句内容,一般以begin开头,end结尾begin .. end 3、触发执行语句内容(trigger_body)中的OLD,NEW:  在trigger_body中,我们可以使用NEW表示将要插入的新行(相当于MS SQL的INSERTED),OLD表示将要删除的旧行(相当于MS SQL的DELETED)。通过OLD,NEW中获取它们的字段内容,方便在触发操作中使用,下面是对应事件是否支持OLD、NEW的对应关系:事件OLDNEWINSERT×√DELETE√×UPDATE√√  由于UPDATE相当于删除旧行(OLD),然后插入新行(NEW),所以UPDATE同时支持OLD、NEW;
 4、MySQL分隔符(DELIMITER):  MySQL默认使用“;”作为分隔符,SQL语句遇到“;”就会提交。而我们的触发器中可能会有多个“;”符,为了防止触发器创建语句过早的提交,我们需要临时修改MySQL分隔符,创建完后,再将分隔符改回来。使用DELIMITER可以修改分隔符,如下:DELIMITER $
... --触发器创建语句;
$ --提交创建语句;
DELIMITER ; 二、MySQL触发器创建进阶:1、MySQL触发器中使用变量:  MySQL触发器中变量变量前面加'@',无需定义,可以直接使用:-- 变量直接赋值
set @num=999;

-- 使用select语句查询出来的数据方式赋值,需要加括号:
set @name =(select name from table);2、MySQL触发器中使用if语做条件判断:-- 简单的if语句:
set sex = if (new.sex=1, '男', '女');

-- 多条件if语句:
if old.type=1 then
update table ...;
elseif old.type=2 then
update table ...;
end if; 三、MySQL查看触发器:  可以使用“show triggers;”查看触发器。由于MySQL创建的触发器保存在“information_schema库中的triggers表中,所以还可以通过查询此表查看触发器:-- 通过information_schema.triggers表查看触发器:
select * from information_schema.triggers;

-- mysql 查看当前数据库的触发器
show triggers;

-- mysql 查看指定数据库"aiezu"的触发器
show triggers from aiezu; 四、MySQL删除触发器:1、可以使用drop trigger删除触发器:drop trigger trigger_name; 2、删除前先判断触发器是否存在:drop trigger if exists trigger_name 五、Msql触发器用法举例:1、MySQL触发器Insert触发更新同一张表:  下面我们有一个表“tmp1”,tmp1表有两个整型字段:n1、n2。我们要通过触发器实现,在tmp插入记录时,自动将n2字段的值设置为n1字段的5倍。
 创建测试表和触发器:-- 创建测试表
drop table if exists tmp1;
create table tmp1 (n1 int, n2 int);

-- 创建触发器
DELIMITER $
drop trigger if exists tmp1_insert$
create trigger tmp1_insert
before insert on tmp1
for each row
begin
set new.n2 = new.n1*5;
end$
DELIMITER ;测试触发更新效果:mysql> insert tmp1(n1) values(18);
Query OK, 1 row affected (0.01 sec)

mysql> insert tmp1(n1) values(99);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tmp1;
+------+------+
| n1 | n2 |
+------+------+
| 18 | 90 |
| 99 | 495 |
+------+------+
2 rows in set (0.00 sec) 2、MySQL触发器Update触发更新另一张表:  下面有有两个表tmp1、tmp2,两个表都有一个相同的字段name。使用触发器实现更新一个表的name时,将另外一个表的name也更新。
 创建测试表和触发器:-- 创建测试表和插入测试数据
drop table if exists tmp1;
drop table if exists tmp2;
create table tmp1 (id int, name varchar(128)) default charset='utf8';
create table tmp2 (fid int, name varchar(128)) default charset='utf8';
insert into tmp1 values(1, '爱E族');
insert into tmp2 values(1, '爱E族');

-- 创建触发器
DELIMITER $
drop trigger if exists tmp1_update$
create trigger tmp1_update
after update on tmp1
for each row
begin
update tmp2 set name=new.name where fid=new.id;
end$
DELIMITER ;测试触发更新效果:mysql> select * from tmp1;
+------+---------+
| id | name |
+------+---------+
| 1 | 爱E族 |
+------+---------+
1 row in set (0.00 sec)

mysql> select * from tmp2;
+------+---------+
| fid | name |
+------+---------+
| 1 | 爱E族 |
+------+---------+
1 row in set (0.00 sec)

mysql> update tmp1 set name='aiezu.com' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from tmp1;
+------+-----------+
| id | name |
+------+-----------+
| 1 | aiezu.com |
+------+-----------+
1 row in set (0.00 sec)

mysql> select * from tmp2;
+------+-----------+
| fid | name |
+------+-----------+
| 1 | aiezu.com |
+------+-----------+
1 row in set (0.00 sec) 查看全部

一、MySQL触发器创建:

1、MySQL触发器的创建语法:

CREATE [DEFINER = { 'user' | CURRENT_USER }] 
TRIGGER trigger_name
trigger_time trigger_event
ON table_name
FOR EACH ROW
[trigger_order]
trigger_body

 

2、MySQL创建语法中的关键词解释:

字段含义可能的值
DEFINER=可选参数,指定创建者,默认为当前登录用户(CURRENT_USER);
该触发器将以此参数指定的用户执行,所以需要考虑权限问题;
DEFINER='root@%'
DEFINER=CURRENT_USER
trigger_name触发器名称,最好由表名+触发事件关键词+触发时间关键词组成; 
trigger_time触发时间,在某个事件之前还是之后;BEFORE、AFTER
trigger_event触发事件,如插入时触发、删除时触发;
  INSERT:插入操作触发器,INSERT、LOAD DATA、REPLACE时触发;
  UPDATE:更新操作触发器,UPDATE操作时触发;
  DELETE:删除操作触发器,DELETE、REPLACE操作时触发;
INSERT、UPDATE、DELETE
table_name 触发操作时间的表名; 
trigger_order可选参数,如果定义了多个具有相同触发事件和触法时间的触发器时(
如:BEFORE UPDATE),默认触发顺序与触发器的创建顺序一致,可以
使用此参数来改变它们触发顺序。mysql 5.7.2起开始支持此参数。
  FOLLOWS:当前创建触发器在现有触发器之后激活;
  PRECEDES:当前创建触发器在现有触发器之前激活;
FOLLOWS、PRECEDES
trigger_body触发执行的SQL语句内容,一般以begin开头,end结尾begin .. end
 

3、触发执行语句内容(trigger_body)中的OLD,NEW:

  在trigger_body中,我们可以使用NEW表示将要插入的新行(相当于MS SQL的INSERTED),OLD表示将要删除的旧行(相当于MS SQL的DELETED)。通过OLD,NEW中获取它们的字段内容,方便在触发操作中使用,下面是对应事件是否支持OLD、NEW的对应关系:
事件OLDNEW
INSERT×
DELETE×
UPDATE
  由于UPDATE相当于删除旧行(OLD),然后插入新行(NEW),所以UPDATE同时支持OLD、NEW;
 

4、MySQL分隔符(DELIMITER):

  MySQL默认使用“;”作为分隔符,SQL语句遇到“;”就会提交。而我们的触发器中可能会有多个“;”符,为了防止触发器创建语句过早的提交,我们需要临时修改MySQL分隔符,创建完后,再将分隔符改回来。使用DELIMITER可以修改分隔符,如下:
DELIMITER $
... --触发器创建语句;
$ --提交创建语句;
DELIMITER ;
 

二、MySQL触发器创建进阶:

1、MySQL触发器中使用变量:

  MySQL触发器中变量变量前面加'@',无需定义,可以直接使用:
-- 变量直接赋值
set @num=999;

-- 使用select语句查询出来的数据方式赋值,需要加括号:
set @name =(select name from table);

2、MySQL触发器中使用if语做条件判断:

-- 简单的if语句:
set sex = if (new.sex=1, '男', '女');

-- 多条件if语句:
if old.type=1 then
update table ...;
elseif old.type=2 then
update table ...;
end if;
 

三、MySQL查看触发器:

  可以使用“show triggers;”查看触发器。由于MySQL创建的触发器保存在“information_schema库中的triggers表中,所以还可以通过查询此表查看触发器:
-- 通过information_schema.triggers表查看触发器:
select * from information_schema.triggers;

-- mysql 查看当前数据库的触发器
show triggers;

-- mysql 查看指定数据库"aiezu"的触发器
show triggers from aiezu;
 

四、MySQL删除触发器:

1、可以使用drop trigger删除触发器:

drop trigger trigger_name;
 

2、删除前先判断触发器是否存在:

drop trigger if exists trigger_name
 

五、Msql触发器用法举例:

1、MySQL触发器Insert触发更新同一张表:

  下面我们有一个表“tmp1”,tmp1表有两个整型字段:n1、n2。我们要通过触发器实现,在tmp插入记录时,自动将n2字段的值设置为n1字段的5倍。
 创建测试表和触发器:
-- 创建测试表
drop table if exists tmp1;
create table tmp1 (n1 int, n2 int);

-- 创建触发器
DELIMITER $
drop trigger if exists tmp1_insert$
create trigger tmp1_insert
before insert on tmp1
for each row
begin
set new.n2 = new.n1*5;
end$
DELIMITER ;
测试触发更新效果:
mysql> insert tmp1(n1) values(18);
Query OK, 1 row affected (0.01 sec)

mysql> insert tmp1(n1) values(99);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tmp1;
+------+------+
| n1 | n2 |
+------+------+
| 18 | 90 |
| 99 | 495 |
+------+------+
2 rows in set (0.00 sec)
 

2、MySQL触发器Update触发更新另一张表:

  下面有有两个表tmp1、tmp2,两个表都有一个相同的字段name。使用触发器实现更新一个表的name时,将另外一个表的name也更新。
 创建测试表和触发器:
-- 创建测试表和插入测试数据
drop table if exists tmp1;
drop table if exists tmp2;
create table tmp1 (id int, name varchar(128)) default charset='utf8';
create table tmp2 (fid int, name varchar(128)) default charset='utf8';
insert into tmp1 values(1, '爱E族');
insert into tmp2 values(1, '爱E族');

-- 创建触发器
DELIMITER $
drop trigger if exists tmp1_update$
create trigger tmp1_update
after update on tmp1
for each row
begin
update tmp2 set name=new.name where fid=new.id;
end$
DELIMITER ;
测试触发更新效果:
mysql> select * from tmp1;
+------+---------+
| id | name |
+------+---------+
| 1 | 爱E族 |
+------+---------+
1 row in set (0.00 sec)

mysql> select * from tmp2;
+------+---------+
| fid | name |
+------+---------+
| 1 | 爱E族 |
+------+---------+
1 row in set (0.00 sec)

mysql> update tmp1 set name='aiezu.com' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from tmp1;
+------+-----------+
| id | name |
+------+-----------+
| 1 | aiezu.com |
+------+-----------+
1 row in set (0.00 sec)

mysql> select * from tmp2;
+------+-----------+
| fid | name |
+------+-----------+
| 1 | aiezu.com |
+------+-----------+
1 row in set (0.00 sec)

vim简体中文帮助手册下载和安装

Linuxliuliangsong 发表了文章 • 0 个评论 • 260 次浏览 • 2016-12-21 09:29 • 来自相关话题

一、下载目录介绍:1、pdf-manual目录:  pdf格式vim简体中文帮助手册。现在一般最新版本的浏览器都支持浏览pdf,所以下载后基本上能直接使用浏览器打开。如果无法使用浏览器打开,请安装一个pdf阅读器打开。
 2、win32-install目录:  这是vim中文帮助手册的windows安装版,只能安装在装有vim编辑器的windows的电脑上。下载后双击即可安装,安装程序会自动检测你的vim安装目录。
  3、vimcdoc目录:  这是vim中文帮助手册的Linux/unix安装版,下载后使用tar命令解压,然后进入解压目录,使用“./vimcdoc.sh -i”命令即可安装:tar -zxvf vimcdoc-1.9.0.tar.gz
cd vimcdoc-1.9.0
./vimcdoc.sh -i  安装好后,在vim中,输入:help命令,即显示vim的中文帮助文档,效果如下:


  进入帮助文档后,将关标移动到子文档名上,然后按CTRL+]可以进入子文档,在子文档按CTRL+T返回主帮助文档。按CTRL+W+方向键可以切换光标所在的窗口。
 二、vim help下载地址:1、vim中文文档下载地址:  本文提供vim简体中文帮助手册的两个下载地址,百度云下载和sourceforge.net下载:sourceforge.net下载:https://sourceforge.net/projects/vimcdoc/files/百度云下载:http://pan.baidu.com/s/1mhIPY1E
 2、vim版本与下载文件关系:vim 7.4下载:简体中文帮助收册的1.9.0版;vim 7.3下载:简体中文帮助收册的1.8.0版; 查看全部

一、下载目录介绍:

1、pdf-manual目录:

  pdf格式vim简体中文帮助手册。现在一般最新版本的浏览器都支持浏览pdf,所以下载后基本上能直接使用浏览器打开。如果无法使用浏览器打开,请安装一个pdf阅读器打开。
 

2、win32-install目录:

  这是vim中文帮助手册的windows安装版,只能安装在装有vim编辑器的windows的电脑上。下载后双击即可安装,安装程序会自动检测你的vim安装目录。
  

3、vimcdoc目录:

  这是vim中文帮助手册的Linux/unix安装版,下载后使用tar命令解压,然后进入解压目录,使用“./vimcdoc.sh -i”命令即可安装:
tar -zxvf vimcdoc-1.9.0.tar.gz
cd vimcdoc-1.9.0
./vimcdoc.sh -i
  安装好后,在vim中,输入:help命令,即显示vim的中文帮助文档,效果如下:
vimdoc_download_install.png
  进入帮助文档后,将关标移动到子文档名上,然后按CTRL+]可以进入子文档,在子文档按CTRL+T返回主帮助文档。按CTRL+W+方向键可以切换光标所在的窗口。
 

二、vim help下载地址:

1、vim中文文档下载地址:

  本文提供vim简体中文帮助手册的两个下载地址,百度云下载和sourceforge.net下载:
 

2、vim版本与下载文件关系:

  • vim 7.4下载:简体中文帮助收册的1.9.0版;
  • vim 7.3下载:简体中文帮助收册的1.8.0版;

Vim编辑器之《Vim常用选项合集》

Linuxliuliangsong 发表了文章 • 0 个评论 • 208 次浏览 • 2016-12-18 23:48 • 来自相关话题

  在vim编辑器中,有很多选项用于控制vim的运行。你可以在使用vim的时候在vim编辑器中临时设置,也可以将选项设置在"~/.vimrc"文件中,让vim命令每次启动时自动加载。
  你可以使用":set"命令查看当前vim的设置的选项,使用":set all"命令查看vim所有支持的选项。有很多选项是打开(on)/关闭(off)一个功能,如num行号显示/隐藏选项,你可以使用":set num"显示行号、":set nonum"隐藏行号:组选项描述用法:set all显示所有选项和设置; :set显示当前设置的所有选项; :set num?显示num选项的当前设置;num可以换成其他选项; :set num
:set nonum打开选项与关闭选项;
num可以换成其他选项; num/nonum是/否显示行号; wrap/nowrap是(默认)/否自动换行; wrapmargin=n设置右边界的值,当输入时到达右边界,并遇到空格时,会自动插入换行; aw/noaw 临时转入shell或使用":n"编辑其他文件时,是/否自动保存当前文件已做的修改; flash/noflash在出错处使用闪烁提醒/使用呜叫提醒;缩进ai/noaiautoindent是/否使用自动缩进方式,新行与前面的行保持—致的缩进; smartindentsmartindent/nosmartindent:是否使用能识别类C语法的智能缩进方式; cindentcindent/nocindent:是/否使用cindent缩进方式; indentexprindentexpr/noindentexpr:是/否使用indentexpr缩进方式; indenttype=缩进方式:autoindent、smartindent、cindent、indentexpr(同上); shiftwidth=n自动缩进字符数; tabstop=n 将TAB键的宽度设置为n个宁符宽度,默认为8;编码encoding=设置vim内部使用的编码字符集;如:prc; fileencoding=设置当前编辑的文件的字符编码方式;如:utf-8; fileencodings=设置vim自动探测fileencoding的顺序列表;如:"ucs-bom,utf-8,latin1"; termencoding=vim工作的终端的编码方式;如:utf-8; ambiwidth=设置汉字所占字符宽度;如:double;搜索ic/noic搜索时忽赂大小写/不忽略大小写(默认); wrapscan在搜索时到达文件尾后是/否跳文件头继续搜索; incsearchincsearch/noincsearch:输入搜索关键字时,是/否(默认)自动高亮匹配的字符; hlsearchhlsearch/nohlsearch:搜索后,是/否(默认)保留匹配字符的高亮显示编程syntax=on/off:是/否显示语法高亮;保存ro/noro是/否只读模式,只读模式写只能通过强制方式":w!"写入,否则无法写入; history=nhistory记录的行数,默认100个历史记录;filefiletype on侦测文件类型; filetype plugin on载入文件类型插件; filetype indent on为特定文件类型载入相关缩进文件; report=n复制或者删除了多少行时显示提示信息,默认为2; laststatus=0,1,2是否显示状态栏,0:不显示,1:需要时间显示,2:总是显示; list/nolist是/否将tab、换行符使用替代字符显示(^I、$); shell=path设置vim执行外部命令时使用的shell路径,如:/bin/bash; showmatch设置输入右半边括号时,是/否(默认)提示所对应的左半边括号; showmode设置是(默认)/否在窗口左下角显示当前的模式:插入、替换等模式; compatible除非.vimrc文件存在,默认vim会尝试采用vi兼容的模式; 相关文章:vim编辑器学习之《vim编辑命令快捷键》Vim编辑器之《Vim常用选项合集》Vim go语言基础IDE开发环境安装(Vundle/vim-go)vim go语言IDE环境Tagbar插件和NERDTree插件安装 查看全部
  在vim编辑器中,有很多选项用于控制vim的运行。你可以在使用vim的时候在vim编辑器中临时设置,也可以将选项设置在"~/.vimrc"文件中,让vim命令每次启动时自动加载。
  你可以使用":set"命令查看当前vim的设置的选项,使用":set all"命令查看vim所有支持的选项。有很多选项是打开(on)/关闭(off)一个功能,如num行号显示/隐藏选项,你可以使用":set num"显示行号、":set nonum"隐藏行号:
选项描述
用法:set all显示所有选项和设置;
 :set显示当前设置的所有选项;
 :set num?显示num选项的当前设置;num可以换成其他选项;
 :set num
:set nonum
打开选项与关闭选项;
num可以换成其他选项;
 num/nonum是/否显示行号;
 wrap/nowrap是(默认)/否自动换行;
 wrapmargin=n设置右边界的值,当输入时到达右边界,并遇到空格时,会自动插入换行;
 aw/noaw 临时转入shell或使用":n"编辑其他文件时,是/否自动保存当前文件已做的修改;
 flash/noflash在出错处使用闪烁提醒/使用呜叫提醒;
缩进ai/noaiautoindent是/否使用自动缩进方式,新行与前面的行保持—致的缩进;
 smartindentsmartindent/nosmartindent:是否使用能识别类C语法的智能缩进方式;
 cindentcindent/nocindent:是/否使用cindent缩进方式;
 indentexprindentexpr/noindentexpr:是/否使用indentexpr缩进方式;
 indenttype=缩进方式:autoindent、smartindent、cindent、indentexpr(同上);
 shiftwidth=n自动缩进字符数;
 tabstop=n 将TAB键的宽度设置为n个宁符宽度,默认为8;
编码encoding=设置vim内部使用的编码字符集;如:prc
 fileencoding=设置当前编辑的文件的字符编码方式;如:utf-8;
 fileencodings=设置vim自动探测fileencoding的顺序列表;如:"ucs-bom,utf-8,latin1";
 termencoding=vim工作的终端的编码方式;如:utf-8;
 ambiwidth=设置汉字所占字符宽度;如:double;
搜索ic/noic搜索时忽赂大小写/不忽略大小写(默认);
 wrapscan在搜索时到达文件尾后是/否跳文件头继续搜索;
 incsearchincsearch/noincsearch:输入搜索关键字时,是/否(默认)自动高亮匹配的字符;
 hlsearchhlsearch/nohlsearch:搜索后,是/否(默认)保留匹配字符的高亮显示
编程syntax=on/off:是/否显示语法高亮;
保存ro/noro是/否只读模式,只读模式写只能通过强制方式":w!"写入,否则无法写入;
 history=nhistory记录的行数,默认100个历史记录;
filefiletype on侦测文件类型;
 filetype plugin on载入文件类型插件;
 filetype indent on为特定文件类型载入相关缩进文件;
 report=n复制或者删除了多少行时显示提示信息,默认为2;
 laststatus=0,1,2是否显示状态栏,0:不显示,1:需要时间显示,2:总是显示;
 list/nolist是/否将tab、换行符使用替代字符显示(^I、$);
 shell=path设置vim执行外部命令时使用的shell路径,如:/bin/bash;
 showmatch设置输入右半边括号时,是/否(默认)提示所对应的左半边括号;
 showmode设置是(默认)/否在窗口左下角显示当前的模式:插入、替换等模式;
 compatible除非.vimrc文件存在,默认vim会尝试采用vi兼容的模式;
 

相关文章:

vim编辑器学习之《vim编辑命令快捷键》

Linuxliuliangsong 发表了文章 • 0 个评论 • 252 次浏览 • 2016-12-17 13:00 • 来自相关话题

  Vim是Linux/Unix平台的一款使用复杂、功能十分强大、且又非常常用的文本编辑器。它有非常多的快捷键、熟练掌握它们,能极大的提高工作效率。下面是爱E族整理的vim中常用的命令,供大家参考。要系统的学习了解vim,大家可以前往:http://vimcdoc.sourceforge.net/doc/ 命令描述保
存:r读入;':r file'从file文件读入;':5 r !command':从命令中读入到第5行后;:w保存;':w':强制保存;':w! file'强制保存到file文件;:q退出;q!:强制退出;:wq,:x保存退出;':x!'、':wq!':强制保存退出;ZQ,ZZ无论如何退出当前编辑;ZQ:放弃未保存内容;ZZ:自动保存修改的内容;:sh进入到shell终端,退出shell后可回到vim当前的编辑;CTRL+Z将vim压人后台运行回到shell,在shell中使用fg命令可恢复vim编辑,jobs查看任务;:!command临时执行shell命令;光


动←↓↑→ 按字符移动,使用方向键,或者用h: ←、 j: ↓、 k:↑、 l:→ 退格,空格退格(命令模式):左移一格;空格(命令模式):右移一格;w移动到下个单词开始处;3w:移动到后面第3个单词开始处;b移动到上个单词开始处;2b:移动到前面第2个单词开始处;e移动到下个单词结尾处;2e:移动到后面第2个单词结尾处;ge移动到上个单词结尾处;2ge:移动到前面第2个单词结尾处;W,B,E,gE同w,b,ge,但对单词的判断更宽松;^,0移动到行首;$移动到行尾;5$:移动到第5行结尾;(,)(:把光标移到完整句子的句首;):把光标移到完整句子的句尾;{,}{:把光标移到完整段落的段首;}:把光标移到完整段落的段尾;f向后移动到指定字符位置;fa:移动到'a'处;4f1:移动到第4个'1'处;F向前移动到指定字符位置;Fb:前移到'b'处;4f8:前移到第4个'8'处;t同f,只是移动到查找字符的前一个字符;T同F,只是移动到查找字符的后一个字符;%移动到与当前位置括弧成对的另一个括弧位置:{..},(..),[..];按

移-,+,Enter-:下移一行;+,回车:下移一行;j,k按行下、上移动;4j:下移4行;5k:上移5行;gg移动到文件首行;5gg:移动到第5行;G移动到文件末行;8G:移动到第8行;%移动到文件百分比位置;10%:移动到文件10%位置;历

&

签``跳回到光标的上一次的位置;CTRL+O无限跳回光标的上一个位置;":jumps"能显示调往的位置列表;CTRL+I无限跳往光标的下一个位置;:makrs显示所有书签;m创建一个书签;mo:创建一个名称为'o'的书签;`跳转到书签位置;`a:调整到书签'a'的位置;宏qqa:开始录制宏,宏名为'a';@@a,5@a:执行宏'a'1次、5次;滚
屏H,M,L移动到屏首、中、尾;zt,zz,zb滚屏使光标位于屏幕首、中、尾部;CTRL+..B、F向上、下滚一屏;U、D向上、下滚半屏;Y、E向上、下滚一行;查

&

换/String搜索字符串Str,Str可以是普通字符串或者正则表达式;
.*[]^%/\?~$在有特殊含义,如要查找它们,需要在前面加上一个"\"字符;
/str/-num,/str/+num:查找后跳转到匹配行的前num行、后num行;
查找时,可以使用'n'查找下一个,使用'N'查找上一个;?String同'/'; 只是"?"是向前查找;
?str?-num,?str?+num:查找后跳转到匹配行的前num行、后num行;:%s/././%s/a/b/:将a替换成b,替换一次;%s/a/b/g:将全部a替换成b;
%s/a/b/gc:查找所有a并询问是否替换为b;
20,30s#a#b#g:将20-30行的a全部替换成b;插
入i,Ii:在当前位置前插入;I:在当前行首个非不可见字符前插入;a,Aa:在当前位置后插入;A:在行尾插入;o,Oo:在当前行下面插入文本;O:在当前行上面插入文本;删
除x,Xx、4x:删右1个、4个字符;X、5X:删左边1个、5个字符;D删除光标到行尾;4D:删除光标到行尾、和光标下面3行;dwdw:删除单词和单词后的空格;d4w:删除4个单词和最后的空格;dede:删除单词,保留单词后空格;d4e:删除4个单词,但保留最后的空格;di删除标记内的内容;di(、di[、di{:删除一对()、[]、{}中的内容;dt删除光标到指定标记之间的内容;dt.:删除光标到'.'间的内容;dT删除指定标记到光标之间的内容;dTs:删除字符's'到光标间的内容;d^,d$d^:删除当前到行首字符;d$:删除当前位置到行尾字符;dddd:删除整行;4dd、d4d:删除4行;:n1,n2 d删除n1-n2的所有行;JJ、5J:将2行、5行连成一行(删除首尾缩进、换行符、空格,使用空格连接多行);gJgJ、5gJ:将2行、5行连成一行(删除尾部换行符,保留空格、缩进);删



入C同D,不过删除后进入插入模式;cw,ce同dw,de,不过删除后进入插入模式;ci,ct,cT同ci,ct,CT,不过删除后进入插入模式;c^,c$同d^,d$,不过删除后进入插入模式;cc同dd,不过删除后进入插入模式;ss、4s:删除1、4个字符后进入插入模式;SS、4S:删除1、4行后进入插入模式;xp交换光标当前位置开始的两个字符的位置;覆
写r,grr、4r使用输入字符替换1个、4个字符;gr:按字符宽度替换;R,gR进入替换输入模式,输入一个字符替换一个字符;gR:按字符宽度替换;复
制yyw、ye、y^、y$、yy、5yy:复制单词、单词、到行首、到行尾、整行、5行;Y同yy,按整行复制;pp:粘贴;5p粘贴5次;注:最后删除的内容会寄存在粘贴板,可以用来粘贴;P同p,不过如果是粘贴整行内容时,p粘贴到当前行下,而P粘贴在当前行上面;大

写~修改光标下字符的大小写,并移动到下一个字符;g~g~4,g~5w,6g~~:转换4个字符、5个单词、6行字符的大小写;gUgU4<空格>,gU5e,6gUU:转换4个字符、5个单词、6行为大写;gugu4<空格>,gu5e,6guu:转换4个字符、5个单词、6行为小写;撤
销u,Uu: 撤销上一个操作;U:撤销当前行所有的操作;CTRL-R恢复被撤销的操作;.重复上一个修改,由爱E族整理,未授权不得转载;Exd删除行(del),':.,100 d':删除当前行到100行的所有行;co拷贝行(copy),':2,5 co 8':将2-5行复制到第8行;m移动行(move),':20,. $':当20行到当前行移动到文件尾;可


式v进入可视模式,然后可按方向键选取文本后进行复制、删除等操作;V进入可视模式,按行选取;CTRL+V进入可视模式,按列选取;o,O可视模式下,o:调到对角去选取;O:跳到对面去选取;移
动>右移一个tab宽度;>5gg、>G、>gg:第5行、文件尾、文件头到当前行右移;>>右移一个tab宽度;3>>:3行右移一个tab宽度;<同'>',不过<为左移;<<同'>>',不过<<为左移;对
齐:%le':%le':全部左对齐;':10,20le':10-20行左对齐;:%ce':%ce':全部居中对齐;':10,20ce':10-20行居中对齐;:%ri':%ri':全部右对齐;':10,20ri':10-20行右对齐;其
他CTRL+G显示当前文件名和位置;CTRL+L清除其他进程对vim窗口的干扰信息;CTRL+V输入控制字符;如:按CTRL+V,后按CTRL+M可输入'^M'字符;K根据当前位置的关键词去查找帮助手册;Q进入“Ex”模式;ga打印光标所在处的字符的 ascii 值:%!xxd进入十六进制编辑模式;:%!xxd -r恢复文本编辑模式;:ab定义缩写,如':ab aiezu aiezu.com',这样输入aiezu时间自动变为aiezu.com。其他:要替换特殊字符,如'^M',可以不能直接输入^M,要使用CTRL+V后,再按CTRL+M输入。vim -r file:恢复由意外退出未保存的vim编辑;view file:以只读的方式打开vim文件编辑;
 相关文章:vim编辑器学习之《vim编辑命令快捷键》Vim编辑器之《Vim常用选项合集》Vim go语言基础IDE开发环境安装(Vundle/vim-go)vim go语言IDE环境Tagbar插件和NERDTree插件安装 查看全部
  Vim是Linux/Unix平台的一款使用复杂、功能十分强大、且又非常常用的文本编辑器。它有非常多的快捷键、熟练掌握它们,能极大的提高工作效率。下面是爱E族整理的vim中常用的命令,供大家参考。要系统的学习了解vim,大家可以前往:http://vimcdoc.sourceforge.net/doc/
 命令描述

:r读入;':r file'从file文件读入;':5 r !command':从命令中读入到第5行后;
:w保存;':w':强制保存;':w! file'强制保存到file文件;
:q退出;q!:强制退出;
:wq,:x保存退出;':x!'、':wq!':强制保存退出;
ZQ,ZZ无论如何退出当前编辑;ZQ:放弃未保存内容;ZZ:自动保存修改的内容;
:sh进入到shell终端,退出shell后可回到vim当前的编辑;
CTRL+Z将vim压人后台运行回到shell,在shell中使用fg命令可恢复vim编辑,jobs查看任务;
:!command临时执行shell命令;



←↓↑→ 按字符移动,使用方向键,或者用h: ←、 j: ↓、 k:↑、 l:→ 
退格,空格退格(命令模式):左移一格;空格(命令模式):右移一格;
w移动到下个单词开始处;3w:移动到后面第3个单词开始处;
b移动到上个单词开始处;2b:移动到前面第2个单词开始处;
e移动到下个单词结尾处;2e:移动到后面第2个单词结尾处;
ge移动到上个单词结尾处;2ge:移动到前面第2个单词结尾处;
W,B,E,gE同w,b,ge,但对单词的判断更宽松;
^,0移动到行首;
$移动到行尾;5$:移动到第5行结尾;
(,)(:把光标移到完整句子的句首;):把光标移到完整句子的句尾;
{,}{:把光标移到完整段落的段首;}:把光标移到完整段落的段尾;
f向后移动到指定字符位置;fa:移动到'a'处;4f1:移动到第4个'1'处;
F向前移动到指定字符位置;Fb:前移到'b'处;4f8:前移到第4个'8'处;
t同f,只是移动到查找字符的前一个字符;
T同F,只是移动到查找字符的后一个字符;
%移动到与当前位置括弧成对的另一个括弧位置:{..},(..),[..];


-,+,Enter-:下移一行;+,回车:下移一行;
j,k按行下、上移动;4j:下移4行;5k:上移5行;
gg移动到文件首行;5gg:移动到第5行;
G移动到文件末行;8G:移动到第8行;
%移动到文件百分比位置;10%:移动到文件10%位置;


&

``跳回到光标的上一次的位置;
CTRL+O无限跳回光标的上一个位置;":jumps"能显示调往的位置列表;
CTRL+I无限跳往光标的下一个位置;
:makrs显示所有书签;
m创建一个书签;mo:创建一个名称为'o'的书签;
`跳转到书签位置;`a:调整到书签'a'的位置;
qqa:开始录制宏,宏名为'a';
@@a,5@a:执行宏'a'1次、5次;

H,M,L移动到屏首、中、尾;
zt,zz,zb滚屏使光标位于屏幕首、中、尾部;
CTRL+..B、F向上、下滚一屏;U、D向上、下滚半屏;Y、E向上、下滚一行;


&

/String搜索字符串Str,Str可以是普通字符串或者正则表达式;
.*[]^%/\?~$在有特殊含义,如要查找它们,需要在前面加上一个"\"字符;
/str/-num,/str/+num:查找后跳转到匹配行的前num行、后num行;
查找时,可以使用'n'查找下一个,使用'N'查找上一个;
?String同'/'; 只是"?"是向前查找;
?str?-num,?str?+num:查找后跳转到匹配行的前num行、后num行;
:%s/././%s/a/b/:将a替换成b,替换一次;%s/a/b/g:将全部a替换成b;
%s/a/b/gc:查找所有a并询问是否替换为b;
20,30s#a#b#g:将20-30行的a全部替换成b;

i,Ii:在当前位置前插入;I:在当前行首个非不可见字符前插入;
a,Aa:在当前位置后插入;A:在行尾插入;
o,Oo:在当前行下面插入文本;O:在当前行上面插入文本;

x,Xx、4x:删右1个、4个字符;X、5X:删左边1个、5个字符;
D删除光标到行尾;4D:删除光标到行尾、和光标下面3行;
dwdw:删除单词和单词后的空格;d4w:删除4个单词和最后的空格;
dede:删除单词,保留单词后空格;d4e:删除4个单词,但保留最后的空格;
di删除标记内的内容;di(、di[、di{:删除一对()、[]、{}中的内容;
dt删除光标到指定标记之间的内容;dt.:删除光标到'.'间的内容;
dT删除指定标记到光标之间的内容;dTs:删除字符's'到光标间的内容;
d^,d$d^:删除当前到行首字符;d$:删除当前位置到行尾字符;
dddd:删除整行;4dd、d4d:删除4行;
:n1,n2 d删除n1-n2的所有行;
JJ、5J:将2行、5行连成一行(删除首尾缩进、换行符、空格,使用空格连接多行);
gJgJ、5gJ:将2行、5行连成一行(删除尾部换行符,保留空格、缩进);




C同D,不过删除后进入插入模式;
cw,ce同dw,de,不过删除后进入插入模式;
ci,ct,cT同ci,ct,CT,不过删除后进入插入模式;
c^,c$同d^,d$,不过删除后进入插入模式;
cc同dd,不过删除后进入插入模式;
ss、4s:删除1、4个字符后进入插入模式;
SS、4S:删除1、4行后进入插入模式;
xp交换光标当前位置开始的两个字符的位置;

r,grr、4r使用输入字符替换1个、4个字符;gr:按字符宽度替换;
R,gR进入替换输入模式,输入一个字符替换一个字符;gR:按字符宽度替换;

yyw、ye、y^、y$、yy、5yy:复制单词、单词、到行首、到行尾、整行、5行;
Y同yy,按整行复制;
pp:粘贴;5p粘贴5次;注:最后删除的内容会寄存在粘贴板,可以用来粘贴;
P同p,不过如果是粘贴整行内容时,p粘贴到当前行下,而P粘贴在当前行上面;


~修改光标下字符的大小写,并移动到下一个字符;
g~g~4,g~5w,6g~~:转换4个字符、5个单词、6行字符的大小写;
gUgU4<空格>,gU5e,6gUU:转换4个字符、5个单词、6行为大写;
gugu4<空格>,gu5e,6guu:转换4个字符、5个单词、6行为小写;

u,Uu: 撤销上一个操作;U:撤销当前行所有的操作;
CTRL-R恢复被撤销的操作;
.重复上一个修改,由爱E族整理,未授权不得转载;
Exd删除行(del),':.,100 d':删除当前行到100行的所有行;
co拷贝行(copy),':2,5 co 8':将2-5行复制到第8行;
m移动行(move),':20,. $':当20行到当前行移动到文件尾;



v进入可视模式,然后可按方向键选取文本后进行复制、删除等操作;
V进入可视模式,按行选取;
CTRL+V进入可视模式,按列选取;
o,O可视模式下,o:调到对角去选取;O:跳到对面去选取;

>右移一个tab宽度;>5gg、>G、>gg:第5行、文件尾、文件头到当前行右移;
>>右移一个tab宽度;3>>:3行右移一个tab宽度;
<同'>',不过<为左移;
<<同'>>',不过<<为左移;

:%le':%le':全部左对齐;':10,20le':10-20行左对齐;
:%ce':%ce':全部居中对齐;':10,20ce':10-20行居中对齐;
:%ri':%ri':全部右对齐;':10,20ri':10-20行右对齐;

CTRL+G显示当前文件名和位置;
CTRL+L清除其他进程对vim窗口的干扰信息;
CTRL+V输入控制字符;如:按CTRL+V,后按CTRL+M可输入'^M'字符;
K根据当前位置的关键词去查找帮助手册;
Q进入“Ex”模式;
ga打印光标所在处的字符的 ascii 值
:%!xxd进入十六进制编辑模式;
:%!xxd -r恢复文本编辑模式;
:ab定义缩写,如':ab aiezu aiezu.com',这样输入aiezu时间自动变为aiezu.com。

其他:

  1. 要替换特殊字符,如'^M',可以不能直接输入^M,要使用CTRL+V后,再按CTRL+M输入。
  2. vim -r file:恢复由意外退出未保存的vim编辑;
  3. view file:以只读的方式打开vim文件编辑;

 

相关文章:

Linux git服务端搭建和公钥免密码登录

Linuxliuliangsong 发表了文章 • 0 个评论 • 250 次浏览 • 2016-12-16 15:54 • 来自相关话题

一、实验环境:git服务端:操作系统:Red Hat Enterprise Linux 7.1 64位服务端ip:10.0.0.101git软件:git version 1.8.3.1(yum方式安装)git客户端:操作系统:Windows 10 64位git软件: 二、Linux git服务端安装:1、安装git命令:  为了方便和稳定性,能使用yum安装的我们尽量使用yum安装,没必要去编译安装:yum -y install git 2、添加用户git用于访问数据仓库:  这里我们创建一个"/storage"目录,用来存储数据。添加一个用户git,git的用户目录为“/storage/gitroot”,同时以后此目录也是我们的数据仓库根目录,以后所有的数据仓库存放在此目录下。将创建的git用户的shell设置为 “/usr/bin/git-shell”的目的是禁止git用户通过shell登录,保证安全:mkdir -p /storage
useradd -d /storage/gitroot/ -s /usr/bin/git-shell git
# 设一个密码
passwd git 3、创建第一个数据仓库aiezu.com:  这里我们创建第一个数据仓库“aiezu.com”,用来存放我们正在开发的网站aiezu.com。同时设置权限为归git用户和组所有:cd /storage/gitroot
git init --bare aiezu.com
chown -R git.git /storage/gitroot/
 4、git服务端安装完成:
  按上面配置好后,一个数据仓库已经配置好了,数据仓库的URL为:"git@10.0.0.101:aiezu.com",用户名名为"git",密码为上面创建的“git”用户的密码。
 三、git免密码登录:  上面在Linux配置好了git服务端,但是是需要密码登录的。如果希望实现免密码登录,需要在客户机的用户目录下".ssh"文件夹生成一对"公钥/私钥",并将"公钥"内容添加到git服务端的git用户根目录下的".ssh/authorized_keys"文件中,这里是“/storage/gitroot/.ssh/authorized_keys”文件,这样就可以通过“公钥/私钥”认证,达到免密码登录的目的。
  简单的说"B服务器"的“git”用户目录下“.ssh/authorized_keys”文件中如果有公钥,与"A主机"当前登录用户的根目录下私钥文件“.ssh/id_dsa”是成对关系,那么B就能以“git”用户无需密码登录到A。
 1、git免密码登录windows客户端配置:  windows的git客户端,在安装目录下,一般有"git-bash.exe"文件,可以用来生成"公钥/私钥"对。打开“git-bash.exe”文件,进入bash命令行。运行下面命令,生成"公钥/私钥"对:mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
ls  直接回车就可以看到在目录下生成了两个文件:id_rsa(私钥)、id_rsa.pub(公钥)。
 2、git免密码登录linux客户端配置:  Linux客户端直接在bash使用"ssh-keygen"命令生成公钥/私钥对即可,如果没有"ssh-keygen"命令,需要安装"openssh"包,运行"yum -y install openssh"即可:mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
ls  3、git免密码登录服务端配置:  在git服务端,在git用户目录下创建一个“.ssh”目录,并在".ssh"命令下添加一个“authorized_keys”文件。记住,每次使用root账户添加文件后,要将文件的所有者变更为git用户,否则会出现文件权限问题:mkdir /storage/gitroot/.ssh
touch /storage/gitroot/.ssh/authorized_keys
chown -R git.git /storage/gitroot/.ssh/  然后将上面在git客户端生成的公钥"id_rsa.pub"的内容追加到authorized_keys文件中去,authorized_keys文件可以放多台客户机的公钥,一条公钥一行即可。这样,authorized_keys文件中有公钥的客户机,即可免密码登录到服务器了。
 4、免密码登录测试:  按上面方法配置好后, 使用git命令“git clone git@10.0.0.101:aiezu.com aiezu.com”,在客户端成功将git服务端的数据仓库克隆到本地的aiezu.com目录: 查看全部

一、实验环境:

git服务端:

  • 操作系统:Red Hat Enterprise Linux 7.1 64位
  • 服务端ip:10.0.0.101
  • git软件:git version 1.8.3.1(yum方式安装)

git客户端:

  • 操作系统:Windows 10 64位
  • git软件:
 

二、Linux git服务端安装:

1、安装git命令:

  为了方便和稳定性,能使用yum安装的我们尽量使用yum安装,没必要去编译安装:
yum -y install git

 

2、添加用户git用于访问数据仓库:

  这里我们创建一个"/storage"目录,用来存储数据。添加一个用户git,git的用户目录为“/storage/gitroot”,同时以后此目录也是我们的数据仓库根目录,以后所有的数据仓库存放在此目录下。将创建的git用户的shell设置为 “/usr/bin/git-shell”的目的是禁止git用户通过shell登录,保证安全:
mkdir -p /storage
useradd -d /storage/gitroot/ -s /usr/bin/git-shell git
# 设一个密码
passwd git

 

3、创建第一个数据仓库aiezu.com:

  这里我们创建第一个数据仓库“aiezu.com”,用来存放我们正在开发的网站aiezu.com。同时设置权限为归git用户和组所有:
cd /storage/gitroot
git init --bare aiezu.com
chown -R git.git /storage/gitroot/

 4、git服务端安装完成:
  按上面配置好后,一个数据仓库已经配置好了,数据仓库的URL为:"git@10.0.0.101:aiezu.com",用户名名为"git",密码为上面创建的“git”用户的密码。
 

三、git免密码登录:

  上面在Linux配置好了git服务端,但是是需要密码登录的。如果希望实现免密码登录,需要在客户机的用户目录下".ssh"文件夹生成一对"公钥/私钥",并将"公钥"内容添加到git服务端的git用户根目录下的".ssh/authorized_keys"文件中,这里是“/storage/gitroot/.ssh/authorized_keys”文件,这样就可以通过“公钥/私钥”认证,达到免密码登录的目的。
  简单的说"B服务器"的“git”用户目录下“.ssh/authorized_keys”文件中如果有公钥,与"A主机"当前登录用户的根目录下私钥文件“.ssh/id_dsa”是成对关系,那么B就能以“git”用户无需密码登录到A。
 

1、git免密码登录windows客户端配置:

  windows的git客户端,在安装目录下,一般有"git-bash.exe"文件,可以用来生成"公钥/私钥"对。打开“git-bash.exe”文件,进入bash命令行。运行下面命令,生成"公钥/私钥"对:
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
ls
  直接回车就可以看到在目录下生成了两个文件:id_rsa(私钥)、id_rsa.pub(公钥)。
 

2、git免密码登录linux客户端配置:

  Linux客户端直接在bash使用"ssh-keygen"命令生成公钥/私钥对即可,如果没有"ssh-keygen"命令,需要安装"openssh"包,运行"yum -y install openssh"即可:
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
ls
  

3、git免密码登录服务端配置:

  在git服务端,在git用户目录下创建一个“.ssh”目录,并在".ssh"命令下添加一个“authorized_keys”文件。记住,每次使用root账户添加文件后,要将文件的所有者变更为git用户,否则会出现文件权限问题:
mkdir /storage/gitroot/.ssh
touch /storage/gitroot/.ssh/authorized_keys
chown -R git.git /storage/gitroot/.ssh/
  然后将上面在git客户端生成的公钥"id_rsa.pub"的内容追加到authorized_keys文件中去,authorized_keys文件可以放多台客户机的公钥,一条公钥一行即可。这样,authorized_keys文件中有公钥的客户机,即可免密码登录到服务器了。
 

4、免密码登录测试:

  按上面方法配置好后, 使用git命令“git clone git@10.0.0.101:aiezu.com aiezu.com”,在客户端成功将git服务端的数据仓库克隆到本地的aiezu.com目录:
linux_git_server_nopasswdlogin.png

vim go语言IDE环境Tagbar插件和NERDTree插件安装

Linuxliuliangsong 发表了文章 • 0 个评论 • 708 次浏览 • 2016-12-14 15:49 • 来自相关话题

  Tagbar插件和NERDTree插件是vim搭建go语言IDE环境必不可少的两个插件。下面是vim编辑go语言源码时,启动Tagbar插件和NERDTree插件后的效果图:


 
 一、安装前准备:  在执行本文的vim安装Tagbar和NERDTree前,需要先安装好go语言环境、以及安装好vim的插件管理器Vundle插件和go语言基础插件“vim-go”,这些操作都在另外一篇文章《Vim go语言基础IDE开发环境安装(Vundle/vim-go)》里面介绍,这里就不再做介绍,下面介绍Tagbar和NERDTree插件的安装。
 二、安装vim Tagbar插件:  Tagbar插件能在侧边栏展示当前go源码中的所有定义的常量、变量、函数等,并能从侧边栏快速跳转到它们的定义处 。安装好后可以使用":help Tagbar"命令获得使用帮助,也可以去官网查看相关文档:http://majutsushi.github.io/tagbar/。
 1、安装gotags:  gotags是go语言编写的,直接使用go get命令安装:go get -u github.com/jstemmer/gotags 2、安装ctags:yum -y install ctags 3、安装vim Tagbar插件:  在"~/.vimrc"插件填写处添加下面几行,保存后重新启动vim(这里我们将Tagbar插件的启动命令注册为“F8键”)。再在命令模式运行“:PluginInstall”命令安装插件,直到"Tagbar"插件安装完成:Plugin 'Tagbar'
" 设置tagbar的窗口宽度
let g:tagbar_width=30
" 映射Tagbar的快捷键,按F8自动打开
map <F8> :TagbarToggle<CR> 4、Tagbar插件启动测试:  安装好Tagbar插件后,用vim打开go文件,输入“:Tagbar”或者按"F8"就可以打开Tagbar。可以使用"CTRL+W+方向键"实现窗口切换,可以使用“Ctrl + ]”跳至函数定义处,然后再使用“Ctrl + t”返回。下面是Tagbar的常用的快捷键和命令:命令描述F1关闭/显示帮助信息;q关闭Tagbar窗口;x放大/缩小Tagbar窗口;s项目排序切换;+, <kPlus>, zo展开折叠;-, <kMinus>, zc收起折叠;o, za折叠收起\展开切换;*, <kMultiply>, zR展开所有折叠;=, zM收起所有折叠;回车转到标签定义处,并且光标跳转到标签定义处;p转到标签定义处,但光标停留在Tagbar的窗口;P在预览窗口显示标签;<C-N>跳到下一个上级标签;<C-P>跳到上一个上级标签;<Space>显示标签定义;
 三、vim安装NERDTree插件:  NERDTree插件能以树型结构在侧边栏展示当前工作目录下所有文件夹和源文件,并支持快速打开指定的源文件。安装好后可以使用":help NERDTree"命令获得使用帮助,也可以去官网查看相关文档:https://github.com/scrooloose/nerdtree​。
 1、安装NERDTree插件:  在"~/.vimrc"插件填写处的继续添加下面两行,保存并重新启动vim(这里我们将NERDTree插件的启动命令注册为“F7键”)。然后再在命令模式运行“:PluginInstall”命令安装插件,直到"NERDTree"插件安装完成:Plugin 'scrooloose/nerdtree'
map <F7> :NERDTreeToggle<CR> 2、NERDTree插件启动测试:  安装好Tagbar插件后,用vim打开go文件,输入“:NERDTree”或者按"F7键"就可以启动NERDTree。下面是NERDTree的常用的快捷键和命令: 命令描述 ?显示帮助信息;打



树F7打开或关闭NERDTree,此键可以根据自己需求定义。:NERDTreeToggle同F7:NERDTree打开NERDTree:NERDTreeClose关闭NERDTreeq关闭这个NERDTree窗口;A调整NERDTree窗口大小(最大化、最小化)书
签:Bookmark <name>将目录树保存为指定名字的书签;:NERDTreeFromBookmark <name>打开指定书签名的目录树;:ClearBookmarks <name>删除指定书签;:ClearAllBookmarks删除所有书签;过
滤I大写"i",显示或者隐藏"."号开头的文件和目录;f切换是否使用文件筛选;F切换是否显示文件;B切换是否显示书签表;根

录:NERDTreeCWD将CWD设为目录树根目录;CD将CWD目录作为目录树的根目录;C将当前目录作为目录树的根目录;u将当前根目录的上级目录作为根目录;U同u;cd将选定的目录作为CWD目录;刷
新R刷新当前根目录r刷新当前目录 目
录o打开\关闭文件或目录,打开文件时光标会跳到编辑区域;O递归打开当前目录下的所有目录x关闭父目录;X关闭所有子目录;定
位:NERDTreeFind在目录树中定位到当前打开的文件;P跳转到根目录p跳转到上层目录K到同级第一个节点J到同级最后一个节点k跳转到上一个节点;j跳转到下一个节点;<C-K>跳转到同级上一个节点;<C-J>跳转到同级下一个节点;文
件m显示文件系统管理菜单
(添加、删除、移动、复制、现在属性等操作)o打开\关闭文件或目录,打开文件时光标会跳到编辑区域;go打开目录树光标所在文件,但光标依然保留在目录树中;i在水平分割割的窗口中打开选定文件;gi同i,但光标依然保留在目录树中;s在垂直分割割的窗口中打开选定文件;gs同s,但光标依然保留在目录树中;t在新标签页中打开文件,并使新的标签到focus状态;T在新标签页中打开文件,保留原标签的focus状态; 查看全部
  Tagbar插件和NERDTree插件是vim搭建go语言IDE环境必不可少的两个插件。下面是vim编辑go语言源码时,启动Tagbar插件和NERDTree插件后的效果图:
linux_vim_golang_tagbar_nerdtree.png
 
 

一、安装前准备:

  在执行本文的vim安装Tagbar和NERDTree前,需要先安装好go语言环境、以及安装好vim的插件管理器Vundle插件和go语言基础插件“vim-go”,这些操作都在另外一篇文章《Vim go语言基础IDE开发环境安装(Vundle/vim-go)》里面介绍,这里就不再做介绍,下面介绍Tagbar和NERDTree插件的安装。
 

二、安装vim Tagbar插件:

  Tagbar插件能在侧边栏展示当前go源码中的所有定义的常量、变量、函数等,并能从侧边栏快速跳转到它们的定义处 。安装好后可以使用":help Tagbar"命令获得使用帮助,也可以去官网查看相关文档:http://majutsushi.github.io/tagbar/
 

1、安装gotags:

  gotags是go语言编写的,直接使用go get命令安装:
go get -u github.com/jstemmer/gotags
 

2、安装ctags:

yum -y install ctags
 

3、安装vim Tagbar插件:

  在"~/.vimrc"插件填写处添加下面几行,保存后重新启动vim(这里我们将Tagbar插件的启动命令注册为“F8键”)。再在命令模式运行“:PluginInstall”命令安装插件,直到"Tagbar"插件安装完成:
Plugin 'Tagbar'
" 设置tagbar的窗口宽度
let g:tagbar_width=30
" 映射Tagbar的快捷键,按F8自动打开
map <F8> :TagbarToggle<CR>
 

4、Tagbar插件启动测试:

  安装好Tagbar插件后,用vim打开go文件,输入“:Tagbar”或者按"F8"就可以打开Tagbar。可以使用"CTRL+W+方向键"实现窗口切换,可以使用“Ctrl + ]”跳至函数定义处,然后再使用“Ctrl + t”返回。下面是Tagbar的常用的快捷键和命令:
命令描述
F1关闭/显示帮助信息;
q关闭Tagbar窗口;
x放大/缩小Tagbar窗口;
s项目排序切换;
+, <kPlus>, zo展开折叠;
-, <kMinus>, zc收起折叠;
o, za折叠收起\展开切换;
*, <kMultiply>, zR展开所有折叠;
=, zM收起所有折叠;
回车转到标签定义处,并且光标跳转到标签定义处;
p转到标签定义处,但光标停留在Tagbar的窗口;
P在预览窗口显示标签;
<C-N>跳到下一个上级标签;
<C-P>跳到上一个上级标签;
<Space>显示标签定义;

 

三、vim安装NERDTree插件:

  NERDTree插件能以树型结构在侧边栏展示当前工作目录下所有文件夹和源文件,并支持快速打开指定的源文件。安装好后可以使用":help NERDTree"命令获得使用帮助,也可以去官网查看相关文档:https://github.com/scrooloose/nerdtree​。
 

1、安装NERDTree插件:

  在"~/.vimrc"插件填写处的继续添加下面两行,保存并重新启动vim(这里我们将NERDTree插件的启动命令注册为“F7键”)。然后再在命令模式运行“:PluginInstall”命令安装插件,直到"NERDTree"插件安装完成:
Plugin 'scrooloose/nerdtree'
map <F7> :NERDTreeToggle<CR>
 

2、NERDTree插件启动测试:

  安装好Tagbar插件后,用vim打开go文件,输入“:NERDTree”或者按"F7键"就可以启动NERDTree。下面是NERDTree的常用的快捷键和命令:
 命令描述
 ?显示帮助信息;




F7打开或关闭NERDTree,此键可以根据自己需求定义。
:NERDTreeToggle同F7
:NERDTree打开NERDTree
:NERDTreeClose关闭NERDTree
q关闭这个NERDTree窗口;
A调整NERDTree窗口大小(最大化、最小化)

:Bookmark <name>将目录树保存为指定名字的书签;
:NERDTreeFromBookmark <name>打开指定书签名的目录树;
:ClearBookmarks <name>删除指定书签;
:ClearAllBookmarks删除所有书签;

I大写"i",显示或者隐藏"."号开头的文件和目录;
f切换是否使用文件筛选;
F切换是否显示文件;
B切换是否显示书签表;


:NERDTreeCWD将CWD设为目录树根目录;
CD将CWD目录作为目录树的根目录;
C将当前目录作为目录树的根目录;
u将当前根目录的上级目录作为根目录;
U同u;
cd将选定的目录作为CWD目录;

R刷新当前根目录
r刷新当前目录 

o打开\关闭文件或目录,打开文件时光标会跳到编辑区域;
O递归打开当前目录下的所有目录
x关闭父目录;
X关闭所有子目录;

:NERDTreeFind在目录树中定位到当前打开的文件;
P跳转到根目录
p跳转到上层目录
K到同级第一个节点
J到同级最后一个节点
k跳转到上一个节点;
j跳转到下一个节点;
<C-K>跳转到同级上一个节点;
<C-J>跳转到同级下一个节点;

m显示文件系统管理菜单
(添加、删除、移动、复制、现在属性等操作)
o打开\关闭文件或目录,打开文件时光标会跳到编辑区域;
go打开目录树光标所在文件,但光标依然保留在目录树中;
i在水平分割割的窗口中打开选定文件;
gi同i,但光标依然保留在目录树中;
s在垂直分割割的窗口中打开选定文件;
gs同s,但光标依然保留在目录树中;
t在新标签页中打开文件,并使新的标签到focus状态;
T在新标签页中打开文件,保留原标签的focus状态;

CentOS编译安装Vim让其支持lua

CentOSliuliangsong 发表了文章 • 0 个评论 • 297 次浏览 • 2016-12-14 10:23 • 来自相关话题

  vim有很多插件依赖于lua功能,但是默认系统自带的vim和使用yum安装的vim都不带lua功能,所以我们需要自己编译安装。要查看vim支不支持lua,打开vim,在命令模式输入“:version”即可以看到vim的一些版本和编译信息,其中"+lua"表示支持lua,"-lua"表示不支持lua。


 
 一、卸载自带的vim:  为了避免冲突,首先我们要卸载掉系统自带的vim,使用"yum -y remove vim-*"命令卸载:yum -y remove vim-* 二、安装vim相关软件:1、安装软件编译工具包集:yum -y groupinstall 'Development tools' 2、安装编译vim必须的依赖包:yum -y install ncurses ncurses-devel
yum -y install lua lua-devel 三、编译安装vim:  既然是编译安装,当然是安装最新版的vim,所以我们这次编译安装的是vim8.0。最新版本的vim可以从vim的官网上查找下载地址:http://www.vim.org/
 1、下载并解压vim安装包:cd /usr/local/src
wget ftp://ftp.vim.org/pub/vim/unix/vim-8.0.tar.bz2
tar -xjf vim-8.0.tar.bz2
cd vim80/ 2、编译安装支持lua的vim:./configure --prefix=/usr --with-features=huge --enable-rubyinterp --enable-pythoninterp --enable-luainterp --with-lua-prefix=/usr
make && make install 3、卸载编译安装的vim:  这一步现在不要执行,只是讲编译安装的卸载方法,用来将来的卸载;要卸载编译安装的vim,必须将vim的编译目录“/usr/local/src/vim80/”保留,在编译目录执行卸载操作:[root@aiezu vim80]# cd /usr/local/src/vim80/
[root@aiezu vim80]# make uninstall
[root@aiezu vim80]# make clean 四、安装完成:  安装完成后,使用"vim --version"命令可以看出,已经支持lua啦,效果如下图,开始安装你想要的插件吧。




  查看全部
  vim有很多插件依赖于lua功能,但是默认系统自带的vim和使用yum安装的vim都不带lua功能,所以我们需要自己编译安装。要查看vim支不支持lua,打开vim,在命令模式输入“:version”即可以看到vim的一些版本和编译信息,其中"+lua"表示支持lua,"-lua"表示不支持lua。
linux_vim_makeinstall_enable_lua.png
 
 

一、卸载自带的vim:

  为了避免冲突,首先我们要卸载掉系统自带的vim,使用"yum -y remove vim-*"命令卸载:
yum -y remove vim-*
 

二、安装vim相关软件:

1、安装软件编译工具包集:

yum -y groupinstall 'Development tools'
 

2、安装编译vim必须的依赖包:

yum -y install ncurses ncurses-devel
yum -y install lua lua-devel
 

三、编译安装vim:

  既然是编译安装,当然是安装最新版的vim,所以我们这次编译安装的是vim8.0。最新版本的vim可以从vim的官网上查找下载地址:http://www.vim.org/
 

1、下载并解压vim安装包:

cd /usr/local/src
wget ftp://ftp.vim.org/pub/vim/unix/vim-8.0.tar.bz2
tar -xjf vim-8.0.tar.bz2
cd vim80/
 

2、编译安装支持lua的vim:

./configure --prefix=/usr --with-features=huge --enable-rubyinterp --enable-pythoninterp --enable-luainterp --with-lua-prefix=/usr
make && make install
 

3、卸载编译安装的vim:

  这一步现在不要执行,只是讲编译安装的卸载方法,用来将来的卸载;要卸载编译安装的vim,必须将vim的编译目录“/usr/local/src/vim80/”保留,在编译目录执行卸载操作:
[root@aiezu vim80]# cd /usr/local/src/vim80/
[root@aiezu vim80]# make uninstall
[root@aiezu vim80]# make clean
 

四、安装完成:

  安装完成后,使用"vim --version"命令可以看出,已经支持lua啦,效果如下图,开始安装你想要的插件吧。
linux_vim_makeinstall_enable_lua_02.png


 

Vim go语言基础IDE开发环境安装(Vundle/vim-go)

Linuxliuliangsong 发表了文章 • 0 个评论 • 351 次浏览 • 2016-12-12 21:03 • 来自相关话题

一、linux安装go语言环境:1、下载go安装包:  打开golang官网下载地址https://golang.org/dl/,根据你的服务器CPU构架,下载对应的最新安装包,并解压。我的CPU构架是X86_64位的,所以下载的是“amd64.tar.gz”结尾的:[root@aiezu.com local]# cd /usr/local/
[root@aiezu.com local]# uname -m
x86_64
[root@aiezu.com local]# wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz
[root@aiezu.com local]# tar -zxvf go1.7.4.linux-amd64.tar.gz  golang语言安装包是绿色安装包,无需编译,解压后设置好环境变量既可用。如果打不开官方网站,也可以从国内的网站上面下载:http://www.golangtc.com/download
 2、设置环境变量:  编辑“~/.bashrc”,在文件末尾添加下面四行,这样每次打开新的bash时,会自动读入下面四条环境变量:export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=~/go # 指定工作目录,你将来的开发代码放在$GOPATH/src/目录下  使用“. ~/.bashrc”命令将载入脚本:[root@aiezu.com ~]# echo $GOROOT

[root@aiezu.com ~]# . ~/.bashrc
[root@aiezu.com ~]# echo $GOROOT
/usr/local/go
[root@aiezu.com ~]# echo $GOBIN
/usr/local/go/bin 二、安装linux vim插件管理器Vundle:1、下载Vundle插件:  Vundle是vim的一个插件管理器, 它本身也是vim的一个插件。Vundle需要使用git命令来安装,如果无git命令,需要使用"yum -y install git"安装git命令。有git命令的,直接安装Vundle:mkdir -p ~/.vim/bundle
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim 2、编辑~/.vimrc文件设置插件:   然后运行“vim ~/.vimrc”命令创建".vimrc"文件,并在文件中添加如下内容,并保存退出:syntax on
" tab宽度和缩进同样设置为4
set tabstop=4
set softtabstop=4
set shiftwidth=4

set nocompatible

" 你在此设置运行时路径
set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

" Vundle 本身就是一个插件
Plugin 'gmarik/Vundle.vim'


"所有插件都应该在这一行之前
call vundle#end()

" filetype off
filetype plugin indent on 3、安装Vundle插件:  ".vimrc"文件配置好后,打开vim,在命令模式输入插件安装命令“:PluginInstall”命令,vim就会自动安装“.vimrc”中配置的所有插件,直到vim底部出现“Done”安装完成。



 三、安装vim go语言插件"vim-go":  vim-go插件go语言IDE环境的一个基础插件,本身就是十分强大的插件,它自带了go语言的语法高亮、语法检测等。同时还有一个十分好用的功能,可以使用“Ctrl + ]”跳至函数定义处,然后再使用“Ctrl + t”返回。安装好后,可以使用“:help vim-go”获得使用帮助,更多介绍请参考:https://github.com/fatih/vim-go。
 1、安装"vim-go"插件:  编辑"~/.vimrc"文件,在其中插件填写处(Plugin 'gmarik/Vundle.vim'下面)添加下面一行并保存退出:Plugin 'fatih/vim-go'  再次打开vim命令,在命令模式下运行“:PluginInstall”,提示“Processing 'fatih/vim-go'”,然后等待。直到提示“Done”插件安装完成。
  然后再将“~/.vimrc”中的“filetype off”前的双引号(双引号用与注释)去掉并保存文件。这时再编辑".go"文件,就有语法高亮功能了:



 2、安装vim-go必要的相关工具:  重新打开vim,输入“:GoInstallBinaries”命令,所有必要的二进制文件(gocode、godef、goimports...)将是自动下载并安装到"$GOBIN"目录或者"$GOPATH/bin"命令 。由于都是从国外托管的网站上下载,这个过程可能有比较长的时间。 安装完成后,你就可以使用vim-go插件的所有功能了。
  3、gocode函数提示功能配置:  vim本身就有代码提示功能,在vim的“/usr/share/vim/vim74/autoload/”目录下“*complete.vim”的文件就是各个语言的代码提示支持文件,如“phpcomplete.vim”是php的代码提示支持文件。但是vim本身是不带go语言的代码提示支持文件的,不过安装好gocode后,会生成一个“gocomplete.vim”到“~/.vim/autoload/”命令,再到"~/.vimrc"文件中配置一下,go语言也支持代码提示了。
  关于代码提示功能需要在"~/.vimrc"要加入的内容如下:filetype plugin indent on

autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType java set omnifunc=javacomplete#Complete
autocmd FileType go set omnifunc=gocomplete#Complete  其中第一行我们在前面已经加入过,后面几行就是各个语言的后缀文件自动补全调用的函数,这些函数都在各自语言的“*complete.vim”文件中定义。最后一行就是go语言的自定补全功能定义了。配置好后,连续按下<C-x><C-o>就会有代码提示了。
 四、Tagbar和NERDTree插件安装:  Tagbar插件提供源码函数结构导航,NERDTree插件提供目录源文件树型结构导航,它们的安装方法请参考:vim go语言IDE环境Tagbar插件和NERDTree插件安装页面。 查看全部

一、linux安装go语言环境:

1、下载go安装包:

  打开golang官网下载地址https://golang.org/dl/,根据你的服务器CPU构架,下载对应的最新安装包,并解压。我的CPU构架是X86_64位的,所以下载的是“amd64.tar.gz”结尾的:
[root@aiezu.com local]# cd /usr/local/
[root@aiezu.com local]# uname -m
x86_64
[root@aiezu.com local]# wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz
[root@aiezu.com local]# tar -zxvf go1.7.4.linux-amd64.tar.gz
  golang语言安装包是绿色安装包,无需编译,解压后设置好环境变量既可用。如果打不开官方网站,也可以从国内的网站上面下载:http://www.golangtc.com/download
 

2、设置环境变量:

  编辑“~/.bashrc”,在文件末尾添加下面四行,这样每次打开新的bash时,会自动读入下面四条环境变量:
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=~/go # 指定工作目录,你将来的开发代码放在$GOPATH/src/目录下
  使用“. ~/.bashrc”命令将载入脚本:
[root@aiezu.com ~]# echo $GOROOT

[root@aiezu.com ~]# . ~/.bashrc
[root@aiezu.com ~]# echo $GOROOT
/usr/local/go
[root@aiezu.com ~]# echo $GOBIN
/usr/local/go/bin
 

二、安装linux vim插件管理器Vundle:

1、下载Vundle插件:

  Vundle是vim的一个插件管理器, 它本身也是vim的一个插件。Vundle需要使用git命令来安装,如果无git命令,需要使用"yum -y install git"安装git命令。有git命令的,直接安装Vundle:
mkdir -p ~/.vim/bundle
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
 

2、编辑~/.vimrc文件设置插件: 

  然后运行“vim ~/.vimrc”命令创建".vimrc"文件,并在文件中添加如下内容,并保存退出:
syntax on
" tab宽度和缩进同样设置为4
set tabstop=4
set softtabstop=4
set shiftwidth=4

set nocompatible

" 你在此设置运行时路径
set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

" Vundle 本身就是一个插件
Plugin 'gmarik/Vundle.vim'


"所有插件都应该在这一行之前
call vundle#end()

" filetype off
filetype plugin indent on
 

3、安装Vundle插件:

  ".vimrc"文件配置好后,打开vim,在命令模式输入插件安装命令“:PluginInstall”命令,vim就会自动安装“.vimrc”中配置的所有插件,直到vim底部出现“Done”安装完成。
linux_vim_golang_vundle_install_01.png

 

三、安装vim go语言插件"vim-go":

  vim-go插件go语言IDE环境的一个基础插件,本身就是十分强大的插件,它自带了go语言的语法高亮、语法检测等。同时还有一个十分好用的功能,可以使用“Ctrl + ]”跳至函数定义处,然后再使用“Ctrl + t”返回。安装好后,可以使用“:help vim-go”获得使用帮助,更多介绍请参考:https://github.com/fatih/vim-go
 

1、安装"vim-go"插件:

  编辑"~/.vimrc"文件,在其中插件填写处(Plugin 'gmarik/Vundle.vim'下面)添加下面一行并保存退出:
Plugin 'fatih/vim-go'
  再次打开vim命令,在命令模式下运行“:PluginInstall”,提示“Processing 'fatih/vim-go'”,然后等待。直到提示“Done”插件安装完成。
  然后再将“~/.vimrc”中的“filetype off”前的双引号(双引号用与注释)去掉并保存文件。这时再编辑".go"文件,就有语法高亮功能了:
linux_vim_golang_vundle_install_02.png

 

2、安装vim-go必要的相关工具:

  重新打开vim,输入“:GoInstallBinaries”命令,所有必要的二进制文件(gocode、godef、goimports...)将是自动下载并安装到"$GOBIN"目录或者"$GOPATH/bin"命令 。由于都是从国外托管的网站上下载,这个过程可能有比较长的时间。 安装完成后,你就可以使用vim-go插件的所有功能了。
  

3、gocode函数提示功能配置:

  vim本身就有代码提示功能,在vim的“/usr/share/vim/vim74/autoload/”目录下“*complete.vim”的文件就是各个语言的代码提示支持文件,如“phpcomplete.vim”是php的代码提示支持文件。但是vim本身是不带go语言的代码提示支持文件的,不过安装好gocode后,会生成一个“gocomplete.vim”到“~/.vim/autoload/”命令,再到"~/.vimrc"文件中配置一下,go语言也支持代码提示了。
  关于代码提示功能需要在"~/.vimrc"要加入的内容如下:
filetype plugin indent on

autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType java set omnifunc=javacomplete#Complete
autocmd FileType go set omnifunc=gocomplete#Complete
  其中第一行我们在前面已经加入过,后面几行就是各个语言的后缀文件自动补全调用的函数,这些函数都在各自语言的“*complete.vim”文件中定义。最后一行就是go语言的自定补全功能定义了。配置好后,连续按下<C-x><C-o>就会有代码提示了。
 

四、Tagbar和NERDTree插件安装:

  Tagbar插件提供源码函数结构导航,NERDTree插件提供目录源文件树型结构导航,它们的安装方法请参考:vim go语言IDE环境Tagbar插件和NERDTree插件安装页面。