目录
1.5、nyy:从光标所在行开始,连续拷贝n行内容(包括光标所在行)
1.6、p:粘贴拷贝到的内容(将内容从光标所在行的下一行开始粘贴)
1.11、Shift 6:移动光标到光标所在行的行头(同时按下两键)
1.12、Shift 4:移动光标到光标所在行的行尾(同时按下两键)
3.1、: 选择是否保存文件内容,并退出(退出vi/vim命令)
在Linux系统中,我们使用vi或vim命令打开文件,对文件进行编辑。vi是系统自带的文件编辑器,vim是升级版的vi编辑器,有许多辅助功能,并且对vi指令兼容。(所以vim不必需)
vim安装命令:sudo apt-get install vim

若出现如上图提示信息,先执行 sudo apt-get upgate ,再执行 sudo apt-get install vim。
使用 vi 文件名 命令打开指定文件后,此时文件被打开,内容展示在终端上。此时我们进入了命令模式:在此模式下,我们不能像在Windows系统上直接对文件进行随意编辑,但可以通过一些命令对文件内容进行操作。目前学习到如下命令:(此时可使用鼠标或上下左右键移动文件光标)
提前创建好的文件 f1.c ,其内容为:


此时光标在第一行,输入一个d后,终端底部出现了一个d,此时再输入一个d,此时输入的内容就符合了命令格式,系统就解析出这两个输入的d是命令,删除了第一行。

当n==1时,就是删除一行,也就是dd命令。

此时文件光标在第一行,输入 7d 后,终端底部出现 7d,再输入一个d,系统就解析输入的7dd为删除命令,删除包括第一行在内的总共7行文件内容。

刚才我们分别使用了 dd 和 7dd 命令,将文件内容删完了。如果我们想恢复文件内容,就可以使用 u 命令,将刚才的删除操作撤回。
u:使用一次,撤销一个最近的操作。vi编辑器只能撤销最近的一次操作,而 vim编辑器可以一直向前撤销(不撤销u命令本身)。

并且在撤销上次命令完成后,在终端底部显示了被撤销的命令是什么时候被执行的。
同时按下 Ctrl 和 r 键,就可以恢复被撤销掉的命令(不恢复本身操作)。可以一直向后恢复。
例如,当光标在第一行时,使用了 yy命令,再直接使用 p 命令,系统就将第一行的内容拷贝到从第二行新开的一行。

在键盘小写模式同时按下 Shift 和 g 键,或在键盘大写模式直接按下G键,就可以将文件光标移动到文件内容的最后一行。
这在文件内容行数特别多的时候非常好用。
系统自带的vi编辑器不会显示文件行号,在安装了vim编辑器后,进行配置后,就可以设置显示行号。(笔记末尾有配置过程)
如果有某个字符输入错误,就可以将光标移动到该字符位置,点击 r 键,再在键盘点击想要替换字符,就可以完成替换。

例如,此时光标在f1.c文件的第二行第一个字符位置,按下 r 键后,终端底部出现 r ,再点击一下 * ,就可以将 # 替换为 * 。

若我们想随意对文件内容进行编辑,就需要进入编辑模式。最直接的方式就是点击一下 i 键,就可以进入编辑模式,并且可以直接在光标当前位置进行数据编辑。除此之外,还有其他命令或快捷方法,可以使用:(进入编辑模式的命令使用一次就进入了编辑模式,下方命令都是在由命令模式进入编辑模式时使用)
点击键盘左上角的 Esc 键,就可以退出编辑模式,回到命令模式。

例如,此时光标在第二行第一个字符位置,点击 i 键后,终端底部出现 -- INSERT --字样。此时,就可以开始在当前位置进行编辑内容,若添加数据,则当前位置及该行以后的原内容向后移动。


例如此时在退出编辑模式,进入命令模式后,光标在e字符位置,直接点击大写I(shift + i),此时光标直接移动到第二行行头,并且进入了编辑模式。

读者可自行验证,练习使用。
编辑完文件内容当然少不了退出和保存。进行保存就需要进入末行模式,在末行模式还可以进行其他操作。
在键盘英文模式点击冒号,就可以进入选择是否保存文件新编辑的内容和退出。

对于权限允许的文件,我们在编辑后想保存编辑过的内容就可以使用 wq 命令,进行文件保存并退出。对于一些不允许修改,或我们不应该修改(以管理员身份访问的文件),就不要使用 wq 命令退出。
如果我们只是打开了文件,没有对文件内容进行任何编辑,就可以直接使用 q 命令,退出。
如果我们对文件内容进行了编辑,又不想保存编辑过的内容,还懒得将文件内容恢复原样,就可以使用 q! 命令强制退出。系统会将文件恢复到使用 vi/vim 命令打开文件之前。

例如,此时将 文件f1.c 的内容另存到一个文件newf 中 。

另存成功后,终端底部显示如图提醒,并且在退出后查看当前目录出现了一个新文件newf。打开后其内容与 文件f1.c 相同。


使用方法:n,m s/oldstring/newstring 。将第n行到第m行之间(包括第n和m行)的 原字符串 都替换为 新字符串 。
例如,此时,使用命令 1,3 s/#include/ABC ,将文件中1到3行的 #include 替换为 ABC 。

替换结果如下:

使用方法:/ + 字符串。从命令模式点击 斜杠/ 键,进入末行模式,再输入想要查找的字符串或字符,系统就将光标定位到光标原位置之后该字符串或字符第一个出现的位置。

此时光标处于第三行第一个字符位置,点击 / ,再输入 i ,系统将光标定位到第三行的第一个 i 的位置,而不是第一行的第一个 i 的位置。

此时,再直接输入一次 /i,后回车,光标就会定位到当前位置的下一个 i 的位置。

若文件中没有该字符串或字符,终端底部就会显示如下提示:(输入 /b ,这段代码中没有字符b)

使用方法:? + 字符串。从命令模式点击 ? 键,进入末行模式,再输入想要查找的字符串或字符,系统就将光标定位到在光标原本位置之前的该字符串或字符第一个出现的位置。具体情况与 / 命令相同。
1.在下载好vim之后,进入根目录下的 etc 目录,这是第一篇笔记中说到的,保存系统配置文件的目录。
2.在进入etc目录后,通过ls命令可以看到有vim目录,再进入vim目录。
3.vim目录下有两个文件:vimrc和vimrc.tiny。以管理员身份打开vimrc文件(命令:sudo vi vimrc)(这是系统配置文件,普通用户无权限)。

4.在vimrc文件最后,进入编辑模式,添加如下内容:

5.保存退出:末行模式输入wq,回车。
6.进入一个文件中,进入末行模式 : ,输入 set nu,完成行号设置。

我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A