<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tcs.nju.edu.cn/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=172.25.49.143</id>
	<title>TCS Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://tcs.nju.edu.cn/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=172.25.49.143"/>
	<link rel="alternate" type="text/html" href="https://tcs.nju.edu.cn/wiki/index.php?title=Special:Contributions/172.25.49.143"/>
	<updated>2026-05-02T19:51:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://tcs.nju.edu.cn/wiki/index.php?title=Vim%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&amp;diff=4259</id>
		<title>Vim常用命令</title>
		<link rel="alternate" type="text/html" href="https://tcs.nju.edu.cn/wiki/index.php?title=Vim%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&amp;diff=4259"/>
		<updated>2010-12-15T02:11:04Z</updated>

		<summary type="html">&lt;p&gt;172.25.49.143: Created page with &amp;#039;移动光标 上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行 下:j nj:向下移动n行 左:h nh:向左移动n列 右:l nl:向右移动n列  w：光…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;移动光标&lt;br /&gt;
上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行&lt;br /&gt;
下:j nj:向下移动n行&lt;br /&gt;
左:h nh:向左移动n列&lt;br /&gt;
右:l nl:向右移动n列&lt;br /&gt;
&lt;br /&gt;
w：光标以单词向前移动 nw：光标向前移动n个单词 光标到单词的第一个字母上&lt;br /&gt;
b：与w相反&lt;br /&gt;
e: 光标以单词向前移动 ne：光标向前移动n个单词 光标到单词的最后一个字母上&lt;br /&gt;
ge:与e相反&lt;br /&gt;
&lt;br /&gt;
$:移动光标到行尾 n$:移动到第n行的行尾&lt;br /&gt;
0（Num）：移动光标到行首&lt;br /&gt;
^:移动光标到行首第一个非空字符上去&lt;br /&gt;
&lt;br /&gt;
f&amp;lt;a&amp;gt;:移动光标到当前行的字符a上，nf&amp;lt;a&amp;gt;移动光标到当前行的第n个a字符上&lt;br /&gt;
F:相反&lt;br /&gt;
&lt;br /&gt;
%:移动到与制匹配的括号上去（），{}，[]，&amp;lt;&amp;gt;等。&lt;br /&gt;
&lt;br /&gt;
nG:移动到第n行上 G:到最后一行&lt;br /&gt;
&lt;br /&gt;
CTRL＋G 得到当前光标在文件中的位置&lt;br /&gt;
&lt;br /&gt;
向前翻页：CTRL+F&lt;br /&gt;
向下移动半屏：CTRL＋G&lt;br /&gt;
向后翻页：CTRL+B&lt;br /&gt;
&lt;br /&gt;
存盘：&lt;br /&gt;
:q! :不存盘退出&lt;br /&gt;
:e! :放弃修改文件内容，重新载入该文件编辑&lt;br /&gt;
:wq ：存盘退出&lt;br /&gt;
&lt;br /&gt;
dw：删除一个单词,需将光标移到单词的第一个字母上，按dw，如果光标在单词任意位置，用daw&lt;br /&gt;
dnw:删除n个单词&lt;br /&gt;
dne:也可，只是删除到单词尾&lt;br /&gt;
dnl:向右删除n个字母&lt;br /&gt;
dnh:向左删除n个字母&lt;br /&gt;
dnj:向下删除n行&lt;br /&gt;
dnk:向上删除n行&lt;br /&gt;
d$：删除当前光标到改行的行尾的字母&lt;br /&gt;
dd：删除一行&lt;br /&gt;
cnw[word]:将n个word改变为word&lt;br /&gt;
cc:改变整行&lt;br /&gt;
C$:改变到行尾&lt;br /&gt;
&lt;br /&gt;
J: 删除换行符，将光标移到改行，按shift+j删除行尾的换行符，下一行接上来了.&lt;br /&gt;
u: 撤销前一次的操作&lt;br /&gt;
shif+u(U):撤销对该行的所有操作。&lt;br /&gt;
&lt;br /&gt;
:set showmode :设置显示工作模式&lt;br /&gt;
&lt;br /&gt;
o：在当前行的下面另起一行&lt;br /&gt;
O（shift+o)：在当前行的上面另起一行&lt;br /&gt;
&lt;br /&gt;
nk或nj：光标向上或向下移n行，n为数字&lt;br /&gt;
an!【ESC】：在行后面加n个感叹号(!)&lt;br /&gt;
nx:执行n次x(删除)操作&lt;br /&gt;
&lt;br /&gt;
ZZ：保存当前文档并退出VIM&lt;br /&gt;
&lt;br /&gt;
:help ：查看帮助文档，在这之中，按CTRL+] 进入超连接，按CTRL＋O 返回。&lt;br /&gt;
:help subject :看某一主题的帮助，ZZ 退出帮助&lt;br /&gt;
&lt;br /&gt;
:set number / set nonumber :显示/不显示行号&lt;br /&gt;
:set ruler /set noruler:显示/不显示标尺&lt;br /&gt;
&lt;br /&gt;
/pattern 正方向搜索一个字符模式&lt;br /&gt;
?pattern 反方向搜索一个字符模式&lt;br /&gt;
然后按n 继续向下找&lt;br /&gt;
&lt;br /&gt;
把光标放到某个单词上面，然后按×号键，表示查找这个单词&lt;br /&gt;
查找整个单词：/\&amp;lt;word\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:set hlsearch 高亮显示查找到的单词&lt;br /&gt;
:set nohlsearch 关闭改功能&lt;br /&gt;
&lt;br /&gt;
m[a-z]:在文中做标记，标记号可为a-z的26个字母，用`a可以移动到标记a处&lt;br /&gt;
&lt;br /&gt;
r:替换当前字符&lt;br /&gt;
nr字符：替换当前n个字符&lt;br /&gt;
&lt;br /&gt;
查找替换：&lt;br /&gt;
way1:&lt;br /&gt;
/【word】 :查找某个word&lt;br /&gt;
cw【newword】:替换为新word&lt;br /&gt;
n: 继续查找&lt;br /&gt;
.: 执行替换&lt;br /&gt;
&lt;br /&gt;
way2:&lt;br /&gt;
:s/string1/string2/g:在一行中将string1替换为string2,g表示执行 用c表示需要确认&lt;br /&gt;
:num1,num2 s/string1/string2/g:在行num1至num2中间将string1替换为string2&lt;br /&gt;
:1,$ s/string1/string2/g:在全文中将string1替换为string2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v:进入visual 模式&lt;br /&gt;
【ESC】退出&lt;br /&gt;
V:shift+v 进入行的visual 模式&lt;br /&gt;
CTRL+V:进如块操作模式用o和O改变选择的边的大小。&lt;br /&gt;
&lt;br /&gt;
粘贴：p，这是粘贴用x或d删除的文本&lt;br /&gt;
复制：&lt;br /&gt;
ynw：复制n个单词&lt;br /&gt;
yy：复制一行&lt;br /&gt;
ynl:复制n个字符&lt;br /&gt;
y$:复制当前光标至行尾处&lt;br /&gt;
nyy:拷贝n行&lt;br /&gt;
完了用p粘贴&lt;br /&gt;
&lt;br /&gt;
:split:分割一个窗口&lt;br /&gt;
:split file.c ：为另一个文件file.c分隔窗口&lt;br /&gt;
:nsplit file.c: 为另一个文件file.c分隔窗口，并指定其行数&lt;br /&gt;
CTRL＋W在窗口中切换&lt;br /&gt;
:close：关闭当前窗口&lt;br /&gt;
&lt;br /&gt;
在所有行插入相同的内容如include&amp;lt;，操作方法如下：&lt;br /&gt;
将光标移到开始插入的位置，按CTRL+V进入VISUAL模式，选择好模块后&lt;br /&gt;
按I（shift+i)，后插入要插入的文本，按[ESC]完成。&lt;br /&gt;
&lt;br /&gt;
:read file.c 将文件file.c的内容插入到当前光标所在的下面&lt;br /&gt;
:0read file.c 将文件file.c的内容插入到当前文件的开始处(第0行）&lt;br /&gt;
:nread file.c 将文件file.c的内容插入到当前文件的第n行后面&lt;br /&gt;
:read !cmd :将外部命令cmd的输出插如到当前光标所在的下面&lt;br /&gt;
&lt;br /&gt;
:n1,n2 write temp.c 将本文件中的n1,到n2行写入temp.c这个文件中去&lt;br /&gt;
&lt;br /&gt;
CTRL＋L刷新屏幕&lt;br /&gt;
shift + &amp;lt; 左移一行&lt;br /&gt;
shift + &amp;gt; 右移一行&lt;br /&gt;
&lt;br /&gt;
u: undo&lt;br /&gt;
CTRL+R: re-do&lt;br /&gt;
J: 合并一行&lt;br /&gt;
CTRL+p 自动完成功能&lt;br /&gt;
CTRL+g 查看当前文件全路径&lt;br /&gt;
&lt;br /&gt;
q[a-z] 开始记录但前开始的操作为宏，名称可为【a-z】，然后用q终止录制宏。&lt;br /&gt;
用reg显示当前定义的所有的宏，用@[a-z]来在当前光标处执行宏[a-z].&lt;/div&gt;</summary>
		<author><name>172.25.49.143</name></author>
	</entry>
	<entry>
		<id>https://tcs.nju.edu.cn/wiki/index.php?title=Yonghang&amp;diff=4171</id>
		<title>Yonghang</title>
		<link rel="alternate" type="text/html" href="https://tcs.nju.edu.cn/wiki/index.php?title=Yonghang&amp;diff=4171"/>
		<updated>2010-12-15T02:10:17Z</updated>

		<summary type="html">&lt;p&gt;172.25.49.143: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 2010 = &lt;br /&gt;
&lt;br /&gt;
== 12/15 ==&lt;br /&gt;
[[vim常用命令]]&lt;br /&gt;
&lt;br /&gt;
== 12/13 ==&lt;br /&gt;
看了桶排序和基数排序，突然更深地明白了bucket的思想&lt;br /&gt;
&lt;br /&gt;
== 12/1 ==&lt;br /&gt;
到目前为止的工作中，获得一个指定范围的素数是我们目前碰到的最大的问题，至今也没有真正解决，miller-rabin的成功率只有3/4，而且数很大后，素数的密度变低，效率是否好也是个问题。&lt;br /&gt;
代码的实现事实上只是很低级的事，素数的问题严重影响了我们的进度，所以我们最近在看dynamic perfect hashing的论文。&lt;br /&gt;
&lt;br /&gt;
== 11/25 ==&lt;br /&gt;
上次至今天由于期中考试的复习，拖延了不少时间，11/24刚刚考完最后一门概率论，有一些随想，写在下面&lt;br /&gt;
#关于创新项目，应该是由我和温主导的一件事，老师的作用应该是在我们困惑的时候指一下路。要做的事不能当做homework，等着老师来布置，这是非常幼稚的一种心态。&lt;br /&gt;
#关于考试的复习，赵建华老师说过，“过度的复习是一种作弊”，如果真正掌握的好，考前是应该不用花这么大力气的，平时应该更用心才是。&lt;br /&gt;
&lt;br /&gt;
今天看了别人的bloom filter实现。bloom filter的原理上周六用30分钟看了一下。&lt;br /&gt;
这份代码是用C写的，我从中学到了不少东西，其中包括：&lt;br /&gt;
#[[在C中如何写参数不确定的函数]]，类似于printf之类&lt;br /&gt;
#有效地利用typedef和define可以使你的代码看起来更优美&lt;br /&gt;
#一份好的代码需要具有很好的健壮性&lt;br /&gt;
#size_t的使用（经搜索发现能更好地为跨平台服务),在32位机上往往是typedef unsigned int size_t，4个byte，64位机上就是8个byte&lt;br /&gt;
#好的测试文件大致应该怎么写（读file，充分的数据量）&lt;br /&gt;
#得到了两个简便的hash函数&lt;br /&gt;
&lt;br /&gt;
== 11/22-11/24 ==&lt;br /&gt;
只剩最后一门概率论，时间较为充裕。FSK的原理已经很清楚了，但我们在做这件事的过程中其实相当不productive，可能有这么几个原因&lt;br /&gt;
#对于C++语言本身，认识的还不够深刻，特别是真正用面向对象思想做一件有用的事时（而不是只是完成homework）&lt;br /&gt;
#对于FSK的原理，没有仔细地去看。a，b，p的取值范围在老师的wiki上写的非常清楚，但就是&#039;&#039;&#039;&#039;&#039;没&#039;&#039;&#039;&#039;&#039;去认真看&lt;br /&gt;
&lt;br /&gt;
这三天在复习《thinking in C++》一书，有了一些与第一次看时不同的体会。&lt;br /&gt;
&lt;br /&gt;
== 11/17 ==&lt;br /&gt;
insterested in bloom flitters :)&lt;br /&gt;
&lt;br /&gt;
== 11/13 ==&lt;br /&gt;
经过与老师讨论,发现有p和没p的区别是巨大的,有p之后可以认为理想的状态下perfect hash的概率是二分之一，无p则可能很小，所以才会一直卡在一个bucket内。&lt;br /&gt;
&lt;br /&gt;
重新确认了a，b，p的值域：a [1,p-1],b [0,p-1],p bigger than universe.&lt;br /&gt;
&lt;br /&gt;
现在的程序效率较好，但还有待于进一步检验&lt;br /&gt;
&lt;br /&gt;
== 11/12 ==&lt;br /&gt;
把重写的FSK调试了一下，总是觉得不该时间这么长&lt;br /&gt;
&lt;br /&gt;
== 11/11 ==&lt;br /&gt;
读数据的接口打算使用fstream,这需要重复读取数据，在写一个简单的测试程序时遇到了不少问题&lt;br /&gt;
 #include&amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include&amp;lt;fstream&amp;gt;&lt;br /&gt;
 #include&amp;lt;string&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
    ifstream in(&amp;quot;data.in&amp;quot;);&lt;br /&gt;
    ofstream out(&amp;quot;data.out&amp;quot;);&lt;br /&gt;
    string s;&lt;br /&gt;
    while(in&amp;gt;&amp;gt;s)&lt;br /&gt;
    {&lt;br /&gt;
        out&amp;lt;&amp;lt;s&amp;lt;&amp;lt;&#039; &#039;;&lt;br /&gt;
    }&lt;br /&gt;
    in.seekg(0,ios::beg);&lt;br /&gt;
    out.seekp(0,ios::end);&lt;br /&gt;
    while(in&amp;gt;&amp;gt;s)&lt;br /&gt;
    {&lt;br /&gt;
        out&amp;lt;&amp;lt;s;&lt;br /&gt;
    }&lt;br /&gt;
    in.close();&lt;br /&gt;
    out.close();&lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
原本应该在data.out中输出两遍data.in的数据，但是实际上只输出了一遍。&lt;br /&gt;
也就是说，    in.seekg(0,ios::beg);这行没能把读指针指向开头，经过单步调试也未能解决&lt;br /&gt;
和大三的学长讨论了很久没有结果&lt;br /&gt;
&lt;br /&gt;
后来在网上搜索，看到一个[http://hi.baidu.com/shzkkqq/blog/item/72a30b24d621c00f4d088d3f.html 网页]&lt;br /&gt;
&lt;br /&gt;
 fstream存在状态：&lt;br /&gt;
 当被打开第一次以后，状态处于错误状态。&lt;br /&gt;
 fstream错误状态&lt;br /&gt;
 fail() , eof() , bad();&lt;br /&gt;
 failbit ， eofbit ，badbit 。&lt;br /&gt;
 正确状态&lt;br /&gt;
 good(),&lt;br /&gt;
 good = not(fail or eof or bad)&lt;br /&gt;
&lt;br /&gt;
实际上文件读完的时候fail会自动置为true，所以可以使用clear函数,将fail设置为false.测试代码如下，只取部分 &lt;br /&gt;
    ifstream in(&amp;quot;data.in&amp;quot;,ios::binary);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;isfail   &amp;quot; &amp;lt;&amp;lt; in.fail() &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;isbad   &amp;quot; &amp;lt;&amp;lt; in.bad() &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;iseof   &amp;quot; &amp;lt;&amp;lt; in.eof() &amp;lt;&amp;lt;endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;isgood   &amp;quot;&amp;lt;&amp;lt; in.good() &amp;lt;&amp;lt; endl;&lt;br /&gt;
    in.clear();&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;isfail   &amp;quot; &amp;lt;&amp;lt; in.fail() &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;isbad   &amp;quot; &amp;lt;&amp;lt; in.bad() &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;iseof   &amp;quot; &amp;lt;&amp;lt; in.eof() &amp;lt;&amp;lt;endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;isgood   &amp;quot;&amp;lt;&amp;lt; in.good() &amp;lt;&amp;lt; endl; &lt;br /&gt;
输出结果为&lt;br /&gt;
 isfail   1&lt;br /&gt;
 isbad   0&lt;br /&gt;
 iseof   1&lt;br /&gt;
 isgood   0&lt;br /&gt;
 isfail   0&lt;br /&gt;
 isbad   0&lt;br /&gt;
 iseof   0&lt;br /&gt;
 isgood   1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
写了一个rabin-miller的测试程序，并安装了gmp库，代码就不附在这里了&lt;br /&gt;
&lt;br /&gt;
== 11/10 ==&lt;br /&gt;
11/11&lt;br /&gt;
补：昨天把kaiyuan写的代码看了一遍，修改了一下，把gsl_rng.h的东西用了进去，转为ubuntu下可以运行的版本&lt;br /&gt;
同样的，关于程序运行的次数，我也有疑问，为什么每次的次数感觉远大于两次&lt;br /&gt;
&lt;br /&gt;
== 11/9 ==&lt;br /&gt;
今天把ubuntu重新安装了一遍，将分区大小改为了6GB。在重新装的时候遇到了一点问题，可以上网,但update manager无法正常工作，正在国外论坛查找解决方案，不知怎么就突然好了，下次遇到还是没有办法。&lt;br /&gt;
在windows中的文件和ubuntu中的文件互相移动后（通过将磁盘mount的方式），如果再次访问，经常会出现permission denied的情况，不是太建议这么做。&lt;br /&gt;
下面介绍gnu库的基本安装方法&lt;br /&gt;
#从gnu的ftp上下载你所需要的库，以gsl为例&lt;br /&gt;
#将压缩包解压至非mount设备的地方，比如home/y0ukn0w/Documents //y0ukn0w is my username&lt;br /&gt;
#cd /home/Documents/gsl-1.14&amp;lt;br /&amp;gt; chmod a+x configure //有时不需要这一句 &amp;lt;br /&amp;gt; ./configure &amp;lt;br /&amp;gt; make &amp;lt;br /&amp;gt; make install&lt;br /&gt;
#ps : 可以打开文件夹，找到对应的INSTALL，里面会有说明&lt;br /&gt;
#在连接的时候可能还是会出错。这时，可以选择输入相应的指令；如果你用的是codeblocks，那么，settings-&amp;gt;compilers and debugger settings-&amp;gt;linker libraries,在这里加入相应的lib&lt;br /&gt;
&lt;br /&gt;
下面介绍gsl/gsl_rng.h的简单使用方法&lt;br /&gt;
代码如下&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;gsl/gsl_rng.h&amp;gt;&lt;br /&gt;
 #include&amp;lt;time.h&amp;gt;&lt;br /&gt;
 int&lt;br /&gt;
 main (void)&lt;br /&gt;
 {&lt;br /&gt;
   const gsl_rng_type * T;&lt;br /&gt;
   gsl_rng * r;&lt;br /&gt;
   T = gsl_rng_rand; //可以将其设置为不同的值，以获取不同的随机数,如改为gsl_rng_randu,gsl_rng_knuthran2002,具体参考manul&lt;br /&gt;
   r = gsl_rng_alloc (T);&lt;br /&gt;
   int i, n = 10;&lt;br /&gt;
   gsl_rng_set(r,int(time(NULL))); //设置随机数seed&lt;br /&gt;
   gsl_rng_env_setup();&lt;br /&gt;
   for (i = 0; i &amp;lt; n; i++)&lt;br /&gt;
     {&lt;br /&gt;
       double u = gsl_rng_uniform (r);&lt;br /&gt;
       printf (&amp;quot;%.5f\n&amp;quot;, u);&lt;br /&gt;
     }&lt;br /&gt;
    double u = gsl_rng_uniform(r);&lt;br /&gt;
    printf(&amp;quot;%.5f\n&amp;quot;,u);&lt;br /&gt;
   gsl_rng_free (r);&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
gsl_rng.h的部分可选用参数如下&lt;br /&gt;
*[[gsl_rng_rand]]&lt;br /&gt;
&lt;br /&gt;
在写需要template的头文件时，为方便调试，往往通过修改头文件的方式来完成。&lt;br /&gt;
现在想来，是自己的接口设计的还不够好。&lt;br /&gt;
现在数据的输入输出打算这样完成：&lt;br /&gt;
#一个程序负责生成随机数，将其输入到data.in文件中&lt;br /&gt;
#主程序中有一个函数ReadData，测试程序中打开data.in和data.out，调用ReadData，将数据读入，处理后输出到data.out中。&lt;br /&gt;
--You will when you believe 13:03, 8 November 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>172.25.49.143</name></author>
	</entry>
</feed>