作者归档:贝贝爸

vim tips

怎么重做和撤销,redo and undo
u:undo last change,撤销最后一次的修改
U:把当前行到初始状态
CTRL+r:redo the undone changes,重做redo的内容。
更多的可以查看
:help undo
“(TAB上边的点):回到光标跳转前的位置。
dd:删除一行。
5dd:删除光标处以下的五行。
按V键进入可视模式,选择要拷贝的内容,按yy拷贝选中的内容,在需要的地方按p拷贝内容到新光标处或新文件中。
i:进入插入模式。
v:进入可视模式。
Esc:回到基本模式
h,j,k,l:上下左右移动光标
vsp:左右分割窗口。
sp:上下分割窗口。
ctrl+w:在窗口中选择。
:q!:不保存退出。
x:保存退出。
w:只保存不退出。
x:删除一个字符。
u:撤消
CTRL+O:回跳。
CTRL+R:撤消刚才的撤消。
:help:帮助。
zz:退出帮助窗口。
3w :向前移动三个单词。
3b:向后移动三个单词。
CTRL+[:跳到光标单词处。
CTRL+T:跳回。
9k:上移九行。
:e 打开新文件(在多窗口操作中很有用)。
yaw:拷贝一个单词。
CTRL+B:把光标移到当前行的左边首部。
CTRL+E:把光标移到当前行的右边首部。
vim -r doc.txt:恢复文件到修改前。
:/查找单词
H:跳到第一行。
M:跳到中间。
L:跳到最后一行。
CTRL+d,u,f,b:下移半屏,上移半屏,下移一屏,上移一屏。
gg:到文件开始处
G:到文件尾部。
–:找到文件上次修改点。
CTRL+p,n:向上查询一个单词,向下查询一个单词。
zo:打开折叠。l键也可以。
zc:关闭折叠。
zr:全部打开折叠。
zm:全部关闭折叠。
zf:创建折叠。
zR:打开所有折叠(包括嵌套)
zM:关闭所有折叠(包括嵌套)
:!ls,查看目录表。
:`o,找到最后修改的文件。
wq,保存退出。
vim txt1 txt2 txt3 txt4,同时打开多个文件,
以下是同时打开多个文件时(建议用多窗口)
n,下一个文件,
n3,往下第三个文件。
first,第一个文件。
last,最后一个文件 。
:/s#kkk#ccc#g,把文件中的kkk替换为ccc

移动光标
上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行
下:j nj:向下移动n行
左:h nh:向左移动n列
右:l nl:向右移动n列

w:光标以单词向前移动 nw:光标向前移动n个单词 光标到单词的第一个字母上
b:与w相反
e: 光标以单词向前移动 ne:光标向前移动n个单词 光标到单词的最后一个字母上
ge:与e相反

$:移动光标到行尾 n$:移动到第n行的行尾
0(Num):移动光标到行首
^:移动光标到行首第一个非空字符上去

f:移动光标到当前行的字符a上,nf移动光标到当前行的第n个a字符上
F:相反

%:移动到与制匹配的括号上去(),{},[],<>等。

nG:移动到第n行上 G:到最后一行

CTRL+G 得到当前光标在文件中的位置

向前翻页:CTRL+F
向下移动半屏:CTRL+G
向后翻页:CTRL+B

存盘:
:q! :不存盘退出
:e! :放弃修改文件内容,重新载入该文件编辑
:wq :存盘退出

dw:删除一个单词,需将光标移到单词的第一个字母上,按dw,如果光标在单词任意位置,用daw
dnw:删除n个单词
dne:也可,只是删除到单词尾
dnl:向右删除n个字母
dnh:向左删除n个字母
dnj:向下删除n行
dnk:向上删除n行
d$:删除当前光标到改行的行尾的字母
dd:删除一行
cnw[word]:将n个word改变为word
cc:改变整行
C$:改变到行尾

J: 删除换行符,将光标移到改行,按shift+j删除行尾的换行符,下一行接上来了.
u: 撤销前一次的操作
shif+u(U):撤销对该行的所有操作。

:set showmode :设置显示工作模式

o:在当前行的下面另起一行
O(shift+o):在当前行的上面另起一行

nk或nj:光标向上或向下移n行,n为数字
an!【ESC】:在行后面加n个感叹号(!)
nx:执行n次x(删除)操作

ZZ:保存当前文档并退出VIM

:help :查看帮助文档,在这之中,按CTRL+] 进入超连接,按CTRL+O 返回。
:help subject :看某一主题的帮助,ZZ 退出帮助

:set number / set nonumber :显示/不显示行号
:set ruler /set noruler:显示/不显示标尺

/pattern 正方向搜索一个字符模式
?pattern 反方向搜索一个字符模式
然后按n 继续向下找

把光标放到某个单词上面,然后按×号键,表示查找这个单词
查找整个单词:/\

:set hlsearch 高亮显示查找到的单词
:set nohlsearch 关闭改功能

m[a-z]:在文中做标记,标记号可为a-z的26个字母,用`a可以移动到标记a处

r:替换当前字符
nr字符:替换当前n个字符

查找替换:
way1:
/【word】 :查找某个word
cw【newword】:替换为新word
n: 继续查找
.: 执行替换

way2:
:s/string1/string2/g:在一行中将string1替换为string2,g表示执行 用c表示需要确认
:num1,num2 s/string1/string2/g:在行num1至num2中间将string1替换为string2
:1,$ s/string1/string2/g:在全文中将string1替换为string2

v:进入visual 模式
【ESC】退出
V:shift+v 进入行的visual 模式
CTRL+V:进如块操作模式用o和O改变选择的边的大小。

粘贴:p,这是粘贴用x或d删除的文本
复制:
ynw:复制n个单词
yy:复制一行
ynl:复制n个字符
y$:复制当前光标至行尾处
nyy:拷贝n行
完了用p粘贴

:split:分割一个窗口
:split file.c :为另一个文件file.c分隔窗口
:nsplit file.c: 为另一个文件file.c分隔窗口,并指定其行数
CTRL+W在窗口中切换
:close:关闭当前窗口

在所有行插入相同的内容如include<,操作方法如下: 将光标移到开始插入的位置,按CTRL+V进入VISUAL模式,选择好模块后 按I(shift+i),后插入要插入的文本,按[ESC]完成。 :read file.c 将文件file.c的内容插入到当前光标所在的下面 :0read file.c 将文件file.c的内容插入到当前文件的开始处(第0行) :nread file.c 将文件file.c的内容插入到当前文件的第n行后面 :read !cmd :将外部命令cmd的输出插如到当前光标所在的下面 :n1,n2 write temp.c 将本文件中的n1,到n2行写入temp.c这个文件中去 CTRL+L刷新屏幕 shift + < 左移一行 shift + > 右移一行

u: undo
CTRL+R: re-do
J: 合并一行
CTRL+p 自动完成功能
CTRL+g 查看当前文件全路径

q[a-z] 开始记录但前开始的操作为宏,名称可为【a-z】,然后用q终止录制宏。
用reg显示当前定义的所有的宏,用@[a-z]来在当前光标处执行宏[a-z].

http://blog.csdn.net/AbnerChai/archive/2005/09/03/470824.aspx
vi-vim-cheat-sheet.png

一个目录安装多个wordpress

$SHH=$_SERVER[“HTTP_HOST”];
//echo $SHH;
if(eregi(‘myzhuang.cn’, $SHH)){
$table_prefix = ‘mzhuang_’;
define (‘WP_CONTENT_DIR’, ‘./mz’);
}else if(eregi(‘virgin-vie’, $SHH)){
$table_prefix = ‘vv_’;
define (‘WP_CONTENT_DIR’, ‘./vv’);
}

/domains/virgin-vie.com.cn/public_html/wp-includes/languages/
/domains/virgin-vie.com.cn/public_html/wp-content/languages/

apache下载zip文件没有content-length

同事做的一个东西,遇到一个问题。http下载一个apache提供服务的一个文件,css,html有content-length(可能是文件较小,是把结果显示的?),但是zip文件没有。导致无法做下载的进度条。网上搜了一下,也有人反应这种情况。
生猛的解决办法是注释掉
LoadModule deflate_module modules/mod_deflate.so
当然,这个会影响其他的应用,因为这个是zip包,不需要再压缩了,找到了下面的语句,增加了zip,问题也得到了解决。
# Don’t compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip)$ no-gzip dont-vary

原因就是服务器支持压缩,对zip类的文件禁用该功能就行了。

推荐国外的WebFaction空间

推荐一个vps服务器

 

https://www.vultr.com/

最近更有25$的优惠

推荐另外一个vps服务器

WebFaction

这是个英国的公司,创建于2003,有美国,欧洲,新加坡的服务器可供选择,换服务器在控制面板里提交一下即可,不怕被墙了。公司网站是http://www.webfaction.com/

如果你最近要买空间,强烈推荐WebFaction。最低$5.5每月(一下付5年是能拿到这个最低价),限制比较少,可通过控制面板安装SVN,Trac,Git做版本管理和项目管理,也可以在控制面板一键安装Wordpress之类的blog、cms程序,或者配置 AWStat之类的统计工具。更重要的是,Webfaction的虚拟主机和别的最大的不同在于他们提供Shell的访问权限,允许客户编译和安装自己需要的应用,同时每个用户的可用内存高达256MB。支持SSH,翻墙很爽,而且支持自己编译、安装程序、自己开端口,比如MangoDB。还可以安装Perforce在里面,设置好Crontab跑定时备份脚本。

更多功能和价格请点击这里

我用电信网络,访问美国服务器很快,通过SSH翻墙下载,500KB每秒的速度可以轻易达到。

SVN,Git hosting之类的服务就要多少钱啊?光这一个就值回票价了。何况还可以自己装Perforce。如果是做dev,WebFaction绝对是首选。

Webfaction将Django集成到其服务器上,目前该产品在Django社区中非常的受欢迎,也是为数不多的能够对Django提供很好支持的虚拟主机。

空间100G,每月流量600G,网站数量不限制,邮箱地址不限制,数据库个数不限制,SSH and SFTP users也不限制。还可以额外购买硬盘,带宽,内存和ip地址。
Webfaction承诺60天内无条件退款。

WebFaction网友的点评

国内国外访问速度都还可以,也很稳定,用两年了

WebFaction支持多SSH账号登录么?像DreamHost那样? 支持SSH登录,但多用户没弄过,就一个人用。

支持多用户,在上面部署的DJANGO,配置简单.

WebFaction优惠码:现在有$53/年的优惠

注册请点击这里

宇宙超级烂的垃圾浏览器360

360真是垃圾到不能再垃圾了,搞个什么安全浏览器忽悠小白们用,居然会自动变HTTP_USER_AGENT,真不知道这帮人脑子怎么长的,送他们去朝鲜吧!下面是apache的日志里查出来一个ip访问网站的记录

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; 360SE)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; 360SE)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; 360SE)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; 360SE)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; 360SE)

想不通,怎么会有这种弱智存在,导致有些程序ECSHOP会莫名其妙的session失效。现象为无法登录,购物车无法使用等。ECSHOP需要修改
include/cls_session.php
这个文件来解决问题

在表单后边显示html页面的表单名字的js代码

有时候需要在页面上直接看到表单里面元素的名字,下面的代码可以将名字显示在页面上,便于查看。
其中用到了jqeury的after,没有的需要用其他方式i来写。

for(var i=0;i<document.form1.elements.length;i++){
if (i>0 && document.form1.elements[i].name!=document.form1.elements[i-1].name) {
$("*[name='"+document.form1.elements[i].name+"']").after(document.form1.elements[i].name);
}
}

nginx用cookie控制访问权限

使用nginx的一个网站有这么一个需求
a.b.com 下的 /c 这个目录下,cookie d=e 才能访问,如果不是,就重定向到f.html
实现方法

server
{
       server_name  a.b.com;
...
location /c/
{
 if ($http_cookie !~* "d=e(;.*|$)"){
 rewrite (.*) /f.html break;}
 }
...
}