风起 发布的文章

[原创]Ubuntu/LinuxMint下右键选择比较文件或目录(类似windows下右键的beyond compare)

LinuxMint下安装svn右键操作, 参考: Ubuntu/LinuxMint下安装rabbitvcs(类似Windows下的Tortoisesvn)

PS: LinuxMint16已经不需要额外添加ppa了,nemo-compare已经纳入到官方库了。所以第一第二步骤可以省略了。

一: 添加cinnamon的ppa源:

sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-stable # 会提示确认, 直接按回车键

二: 更新本地源缓存

sudo apt-get update

三: 安装meld, nemo扩展

sudo apt-get install nemo-compare meld #默认使用meld比较

四: 重启Nemo

killall nemo
nemo

此时随意选中两个文件, 然后点击右键, 会出现一个compare选项, 点击会打开meld进行比较, 也可以单个选择文件或目录, 和windows下beyond compare右键操作一样, 只是变成了英文而已.

五: 使用beyond compare进行比较

vi .config/nemo-compare.conf # 若文件不存在, 记得先随意比较两个文件, 来生成配置
[Settings]
diff_engine_path = bcompare
diff_engine_path_3way = bcompare
diff_engine_path_multi = #此处可留空, 也可输入which bcompare后得到的值
defined_comparators = ['bcompare', 'meld']

重启nemo(第四步), 再次比较文件文件后, 打开的窗口就是beyond compare了. 牛逼透了, 所有的设置都是这么简单...

beyond compare linux版下载地址: http://www.scootersoftware.com/download.php

截图参考:
请输入图片描述

[转载]VIM使用小技巧-重新载入文件

原文地址: VIM使用小技巧-重新载入文件

有时候要使用VIM打开了一些文件,但是在其他地方把次文件改动了,例如使用git进行checkout等操作,需要重新载入此文件。

1 重新载入当前文件:

:e
:e! #放弃当前修改,强制重新载入

2 重新载入所有打开的文件:

:bufdo e 或者 :bufdo :e!
:bufdo命令表示把后面的命令应用到所有buffer中的文件。

参考网址:Refresh all files in buffer from disk in vim, Run a command in multiple buffers

[转载]MySQL 中将一个表的数据插入另外一个表的方法

参考地址: MySQL 中将一个表的数据插入另外一个表的方法

如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:

INSERT INTO 目标表 SELECT  * FROM 来源表;

比如要将 articles 表插入到 newArticles 表中,则是:

INSERT INTO newArticles SELECT  * FROM articles;

如果只希望导入指定字段,可以用这种方法:

INSERT INTO 目标表 (字段1, 字段2, ...) SELECT  字段1, 字段2, ...  FROM 来源表;

注意字段的顺序必须一致。

[转载]如何查看某个文件在哪个软件包(rpm)中

参考链接: 如何查看某个文件在哪个软件包中?

我们在Linux中安装软件包时,经常会有缺少某个依赖文件而无法继续。用yum provides可以查看某个文件是包含在哪个软件包中,例如,要查看libstdc++.so.5是属于哪个软件包中,方法如下:

$ yum provides libstdc++.so.5

结果如下:

compat-libstdc++-33-3.2.3-63.i386 : 兼容的标准 C++ 库

非常有用。

另外,如果你想查看本机上已经安装的文件是属于哪个RPM软件包中,还可以用以下方法:

$ rpm -qf /usr/lib/libstdc++.so.6
libstdc++-4.3.0-8.i386

[记录]让Samba支持软连接

参考地址: 让Samba支持软连接,方便开发的实践操作。

家里的系统由centos6换成linuxmint(实在是好用才换)了, 重新配置好samba后,发现里面的一个软链接到pt下载目录的目录不能访问。

测试半天,chcon, chmod, chown,不行,仔细一想,应该是samba下软链接支持问题了,google后,解决,方案如下, 在smb.conf增加以下三行

wide links = yes  
follow symlinks = yes  
unix extensions  = no 

重启smbd服务即可。

[记录]mysql的in查询, 查询结果按in集合顺序显示

需求来自, 某些特定场景, 比如人工推荐, 编辑后台输入一串id, 前台需要按输入的id顺序显示.

mysql 的in语法如下:

SELECT * FROM `single` WHERE `single_id` IN ('987', '256', '381', '586');

正常情况下, 取出的数据, 会按照 256, 381, 586, 987排序, 而我需要的是987, 256, 381, 586.

所以需要对sql进行改造:

SELECT * FROM `single` WHERE `single_id` IN ('987', '256', '381', '586') ORDER BY FIELD (`single_id`, '987', '256', '381', '586'); 

这样就会按照in集合的顺序返回, 但是同时也带来一个问题:EXPLAIN会发现Using filesort, 大多数情况下这是sql语句性能低下的代表, 所以建议非特殊场景不要使用, 至于真正损失的性能, 有待测试.

另外, 也可以直接IN, 然后程序排序, 谁的综合效率谁更高呢??? 同样有待测试.

[记录]Linux查找和替换目录下所有文件中字符串

原文地址: Linux查找和替换目录下所有文件中字符串

Linux查找和替换目录下所有文件中字符串

单个文件中查找替换很简单,就不说了。文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结。

查找文件夹下包含字符串的文件
例:查找/usr/local目录下所有包含”rubyer.me”的文件。

grep -lr 'rubyer.me' /usr/local/*

vim替换单个文件中所有字符串方法
例:替换当前文件中所有old为new

:%s/old/new/g

%表示替换说有行,g表示替换一行中所有匹配点。

替换文件夹下包含字符串的文件
sed结合grep
例:要将目录/www下面所有文件中的old都修改成new,这样做:

sed -i "s/old/new/g" `grep old -rl /www`

[转载]代码中特殊的注释技术—TODO、FIXME和XXX的用处

原文地址: 代码中特殊的注释技术——TODO、FIXME和XXX的用处"

本文内容概要: 代码中特殊的注释技术——TODO、FIXME和XXX的用处。

前言:
今天在阅读Qt Creator的源代码时,发现一些注释中有FIXME英文单词,用英文词典居然查不到其意义!
实际上,在阅读一些开源代码时,我们常会碰到诸如:TODO、FIXME和XXX的单词,它们是有其特殊含义的。、

TODO: + 说明:
如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明。

FIXME: + 说明:
如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。

XXX: + 说明:
如果代码中有该标识,说明标识处代码虽然实现了功能,但是实现的方法有待商榷,希望将来能改进,要改进的地方会在说明中简略说明。

eclipse中特殊的注释:
在eclipse中,TODO、FIXME和XXX都会被eclipse的task视图所收集。在项目发布前,检查一下task视图是一个很好的习惯。此外,在eclipse中,我们可自定义自己的特殊注释标签。如在C/C++中,进入window—>preferences—>C/C++—>Task Tags窗口即可添加特殊标签,默认只有TODO、FIXME和XXX。

[记录]vim 记住上一次编辑的位置

打开/etc/vimrc 在最后一行 加入:

if has("autocmd")
    au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

如果已经有, 去掉注释即可.