1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
VIM中常用的替换模式总结。
1,简单替换表达式
替换命令可以在全文中用一个单词替换另一个单词:
:%s/four/4/g
“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可
如果你有一个象 “thirtyfour” 这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成”thirty4″。要解决这个问题,用 “\<” 来指定匹配单词开头:
:%s/\” 来解决这个问题:
:%s/\/4/g
如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你:
:%s/\/4/gc
2,删除多余的空格
要删除这些每行后面多余的空格,可以执行如下命令:
:%s/\s\+$//
命令前面指明范围是 “%”,所以这会作用于整个文件。”substitute” 命令的匹配模式是
“\s\+$”。这表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的 “to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。
3,匹配重复性模式
星号项 “*” 规定在它前面的项可以重复任意次。因此:
/a*
匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因为零次也包含在内。星号 “*” 仅仅应用于那个紧邻在它前面的项。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加 “\(“,后面加 “\)”。因此这个命令:
/\(ab\)*
匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。
要避免匹配空字串,使用 “\+”。这表示前面一项可以被匹配一次或多次。
/ab\+
匹配 “ab”,”abb”,”abbb”,等等。它不匹配 后面没有跟随 “b” 的 “a”。
要匹配一个可选项,用 “\=”。 例如:
/folders\=
匹配 “folder” 和 “folders”。
4,指定重复次数
要匹配某一项的特定次数重复,使用 “\{n,m}” 这样的形式。其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:
/ab\{3,5}
匹配 “abbb”,”abbbb” 以及 “abbbbb”。
当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如:
模式 匹配次数
\{,4} 0,1,2,3 或 4
\{3,} 3,4,5,等等
\{0,1} 0 或 1,同 \=
\{0,} 0 或 更多,同 *
\{1,} 1 或 更多,同 \+
\{3} 3
5,多选一匹配
在一个查找模式中,”或” 运算符是 “\|”。例如:
/foo\|bar
这个命令匹配了 “foo” 或 “bar”。更多的抉择可以连在后面:
/one\|two\|three
匹配 “one”,”two” 或 “three”。
如要匹配其多次重复,那么整个抉择结构须置于 “\(” 和 “\)” 之间:
/\(foo\|bar\)\+
这个命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。
再举个例子:
/end\(if\|while\|for\)
这个命令匹配 “endif”,”endwhile” 和 “endfor”。
Read more...
USACO Training--Friday the Thirteenth学习笔记
解决问题的方法真的有好多种,有的可以用很少的代码实现,好佩服。
自己写的代码:
Read more...
/*
ID:
LANG:C
TASK:friday
*/
#include
int main()
{
int i,j,n,a[7]={0},t;//t
FILE *fin=fopen("friday.in","r");
FILE *fout=fopen("friday.out","w");
fscanf(fin,"%d",&n);
for(i=0;i
看到蔡勒公式,感觉有意思 记录一下,说不定会用到
蔡勒公式是一种计算任何一日属一星期中哪一日的算法,由蔡勒(Julius Christian Johannes Zeller)推算出。
公式都是基于公历的置闰规则来考虑。
公式中的符号含义如下:
w:星期
c:世纪(前两位数)
y:年(后两位数)
m:月(m 的取值范围为 3 至 14,即在蔡勒公式中,某年的 1、2月要看作上一年的 13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
d:日
[ ]:称作高斯符号,代表取整,即只要整数部份。
mod:同余(这里代表括号里的答案除以 7 后的余数)(请注意前面是负数取模的情况,取模只可以是正数)
若要计算的日期是在1582年10月4日或之前,公式则为
(因罗马教皇修改历法,把1582年10月4日的下一天改为1582年10月15日)
vim使用笔记记录1--选择、复制和粘帖
今天写代码特意在vim下写的,逼着自己不动鼠标。不能解决的问题就google一下然后学习 ,再操作下,这次记录最基本的选择、复制和粘帖
基本操作流程:
进入可视模式,按ESC键。然后按v键,进入虚拟模式,相当于模拟鼠标。然后用方向键选定你的内容.(假如,移动光标上下左右,选中第三行和第四行的内容),然后按y键复制选定的内容;再用方向键移动到你要粘贴的地方(假如,移动指针到第十行),最后按p键来粘贴。
贴大牛的笔记:
1. 将光标移动到将要复制的行处,按yy举行复制当前行(按nyy复制n行),再移动到粘贴位置,按p举行粘贴。
2. 将光标移到复制的首位置,按下v,用hjkl移动,按y复制,如果按d就表示剪切,按p粘贴。
3. 光标移到肇始行,输入ma;光标移到结果行,输入mb;光标移到粘贴行,输入mc;然后 :'a,'b co 'c,把 co 改成 m 就成剪切了。
4. 光标移动到要复制的行,输入yny(n表现要复制该行以下n行);光标移动到粘贴行,按p粘贴。
5. 直接输入:n1,n2 co n3。(n1为肇始行,n2为结果行,n3为粘贴行)
6. 差别文件之间的复制:用:sp [filename]打开另一文件,(用^ww在文件之间切换),然后按上述要领复制
相关的下令如下:
yy 将当前行复制到缓冲区
yw 将当前单词复制到缓冲区
y1 将光标处的一个字符复制到缓冲区
p 将缓冲区的信息粘贴到光标的背面
:行号1 ,行号2 copy 行号3 将行号1到行号2的内容复制到行号3地址行的背面。
:行号1 ,行号2 move 行号3 将行号1到行号2的文本内容移动到行号3地址行的背面。
7. 寄存器操纵
"?nyy: 将当前行及其下n行的内容存储到寄存器?中,此中?为一个字母,n为一个数字
"?nyw: 将当前行及其下n个字存储到寄存器?中,此中?为一个字母,n为一个数字
"?nyl: 将当前行及其下n个字符存储到寄存器?中,此中?为一个字母,n为一个数字
"?p: 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母 ,也可以是一个数字
ndd: 将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中 vi 中配置tab为4和自动转换成空格
yw命令可以复制一个单词。yy命令可以复制一行,y$命令可以复制从当前光标到本行结尾的所有字符
' 跳转前的光标位置
" 最后编辑的光标位置
[ 上一次修改的开始处
] 上一次修改的结尾处
将光标移到某一行,用命令ma来进行标记。在这里m是标记的命令,a是对这一行所做标记的名称,当然也可以使用26个字母中的任意一个做为标记名称。
剪切与复制相同:
Read more...
剪切一行:dd
剪切当前行光标所在的位置到行尾:d$
剪切当前行光标所在的位置到行首:d^
前切三行:3dd,即从当前行+下两行被剪切了。
USACO Training--Greedy Gift Givers学习笔记
今天做完百度acm的题,群里几个人在讨论各个学校的acm队伍、学习等。说到一起做USACO Training上的题目。我遍开始做了,以为这个网站是训练,是一个循序渐进的过程。做到Greedy Gift Givers这个题目,学到很多东西,记录一下。
这个题目很简单,不需要神马高深的算法,主要学到许多c语言的用法,先上我自己写的代码。
Read more...
/*
ID:
LANG:C
TASK:gift1
*/
#include
struct gift
{
char name[15];
int get;
int give;
}g[10];
int main()
{FILE *fin=fopen("gift1.in","r");
FILE *fout=fopen("gift1.out","w");
int i,np;
fscanf(fin,"%d",&np);
for(i=0;i
这里学到的几点:
结构体里的get和give可以只用一个最后结果表示就行。
我自己写的查找字符串的操作遍历了结构图数组所有元素,可以直接break退出循环,看别人写的代码用while很好,记录下。
j=0;
while(strcmp(a[j],b)) j++;
Vim之打造Python自动缩进
参考文章:http://www.cnblogs.com/samwei/archive/2011/04/25/2026211.html
写得很详细,参考一下。我只是想实现python的自动缩进,所以就照做了前两条。
安装vim时自带的插件文件,只要修改一下vimrc文件就好。
sudo vi /usr/share/vim/vimrc
添加:
Read more...
set filetype=python au BufNewFile,BufRead *.py,*.pyw setf python set autoindent " same level indent set smartindent " next level indent set expandtab set tabstop=4 set shiftwidth=4 set softtabstop=4哈哈 测试了一下 成功了。虽然不是很懂具体是神马意思,但是可以猜测个差不多。先这样吧,有时间仔细研究一下vim的文档。 显示行号: 在配置文件中加入 set number 命令为‘:set nu’
sae-python使用django1.4搭建网站
几个需要注意的地方,官网说的很清楚:
1、 config.yaml文件修改,
Read more...
name: py version: 1 libraries: - name: django version: "1.4" handlers: - url: /static static_dir: static2、index.wsgi文件修改,
import os
import django.core.handlers.wsgi
import sae
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
application = sae.create_wsgi_app(django.core.handlers.wsgi.WSGIHandler())
之后就打印了一个hello world!
用到的几个svn命令
svn checkout https://svn.sinaapp.com/newapp #此处需要认证,用户名/密码为您的SAE安全邮箱和安全密码
svn add 1/
svn commit -m"add wordpress"
ubuntu卸载django1.3.1安装django1.4
官网资料:https://docs.djangoproject.com/en/dev/topics/install/#installing-development-version
1、找到django安装目录,官网提供的方法:python -c "import sys; sys.path = sys.path[1:]; import django; print(django.__path__)"
当然可以在终端 进入python,寻找。
2、直接删除目录下的django文件夹。
3、安装django1.4新版本。按照官网方法就ok。
开始找的site-packages目录,发现是空的,后来才知道,改成dist-packages。从django官网下载文件速度慢死,第一次下载没下载完就结束了,安装没成功。
Read more...
操作系统课程设计--短作业优先作业调度
今天把操作系统作业做完了,本来以为很简单的一个程序几十行就写完了。没想到写了有二百行,各种添加变量,各种添加if,各种添加for,直接晕菜了。
写得很乱,说不定明天就忘记写得神马意思了。先贴出来,等上机的时候在优化一下。<操作系统课程设计--短作业优先作业调度>
code:
Read more...
#include
#include
#include
#define MAXNUM 5
#define MAXTIME 20
struct sjf
{
char name[8];
int arrivetime;
int servicetime;
int runtime;
int is_over;//是否运行完
int starttime;
int finishtime;
int turnaroundtime;
float rightturnaroundtime;
}p[MAXNUM];
static int j=0,k=0,l=0;//j当前正在执行的进程 k当前时间已经到达的最大进程 l是否没有进程运行
//读取进程数据
void readProcess()
{
int i;
char str[200];
FILE *fp;
char *token;
if ((fp=fopen("Process","rt"))==NULL)
{
printf("读取文件失败!\n");
getchar();
exit(1);
}
printf("|--------------------------------------|\n");
printf("|--进程名称--|--到达时间--|--服务时间--|\n");
for (i=0;i
做了几个百度之星比赛的acm题目
做了白天一整天,就做出了7个题,下午就做出两个。一起做过几个acm的题目,太难了,半天做不出一个,就没兴趣继续做了。这次百度的题目有几个很简单,就做了几个,其中有群里说的思路,还有从网上找到的算法做的。准备将学到的知识总结一下。
今天上网看了一下,各个题目的最好代码占用的内存和代码长度,都好牛比的说。实在是不知道他们是怎么写出来的。
ABCD题是几个公式就搞定了。
E:C++ 与Java
这个题目也比较简单,就是开始的时候,题目上说“长度不超过100”,然后就定义了一个长度为一百的字符串变量,结果当为C++的时候,添加“_”后就会越界了,直接就“Runtime Error”。
G:聊天就是Repeat
这个题用到了一个scanf的格式化,以前没用过但是却知道,开始不知道行不行,试了下成功了。
Read more...
scanf("%[^EOF]",s);
J:百度的新大厦
这个题是先看到群里说了以后才坐的,没怎么思考。
Python多线程学习
找到几个零碎的学习资料:
http://www.cnblogs.com/holbrook/tag/python/
http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html
http://www.cnblogs.com/twelfthing/articles/2095502.html
Python实现多线程下载学习代码
http://www.oschina.net/code/snippet_70229_2407
官网文档:
http://docs.python.org/library/thread.html
http://docs.python.org/library/threading.html
Read more...