- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
我们找到apache的配置文件[root@server conf]# vi httpd.conf修改 #ServerName www.example.com:80为 ServerName localhost:80
云计算为企业带来了很多好处,它使得企业开发应用程序、测试应用程序,并以更低的资本支出、更低的维护成本和更好的可管理性以及更快地使用应用程序。然而,选择云服务提供商是一个困难的选择。这主要是因为市场上有很多云服务提供商,其次这些云服务提供商专注的是不同的云计算市场的领域。这些包括基础设施即服务(IaaS)、软件即服务(SaaS)、平台即服务(PaaS)。因此,在选择云托管服务提供商时必须考虑?下因素。1用户界面用户界面(UI)是评估云计算解决方案时要考虑的关键因素,良好的UI将有助于缓解IT部?迁移到虚化环境所需的时间变化,特别是因为资源稀缺且需要快速升级的情况。因此,寻找一个提供用户友好UI的云服务提供商。2服务级别协议虽然服务级别协议不能视为服务的保证,但最好与提供相同服务的云托管服务提供商合作。服务水平协议是指服务提供商承诺在出现问题时快速响应,并在停机时间内退还账单中的一小部分。如果标准服务级别协议不足,则提供商必须准备定制该协议,以使双方都能接受。3设置账户和生活中的一样,第一印象也是极为重要的,云托管环境中的IaaS部门中第一印象指的是提供商的网站内容,与其销售团队的交易以及整个注册流程。云服务提供商的产品和价格计划应该简单?懂,潜在客户应该能够快速搜集?他们所需的信息,设置服务器账户并使其运行。4性能对云计算的性能有清楚的了解,大多数云服务提供商提供大小不同的计算资源,计算资源从单核实例(最小)到多核-内存实例(最大)。但是,存储I/O可能因云服务提供商而异,存储I/O通常是决定应用程序在云环境中的性能的关键因素。5安全在选择云服务提供商时,考虑其数据中心的位置也很重要。这是因为合规性和安全性因国家而异,特别是在欧洲地区。云服务提供商如何确保其网络、数据和用户数据的安全性也是选择服务提供商时要考虑的一个非常重要???。因此,选择已经由云安全联盟和英国标准协会创?的安全信任和保证注册管理机构认证的云服务提供商是一个不错的选择。6数据中心位置和网络基础设施云服务托管提供商的网络基础设施是性能方面的一个关键部分,他们的网络基础设施应该能够支持用户的具体需求。数据中心位置也以各种方式对性能产生影响,包括用户数据传输速度、法规限制、应用程序的设计、管辖法律的适用性(如果发生争议并且容易受到地震等环境因素的影响)。7?术支持和客户服务确定潜在的云服务提供商是否提供免费的技术支持或不同层次的付费支持非常重要,无论是订阅的还是即付即用的。因此,云服务提供商的支持部门也要慎?考虑,并找出他们提供什么级别的支持,以及它是否适合您的需求。8定价和账单促使企业转向云计算的主要因素是它提供的资本节省。因此,大多数云计算公司提供基于效用的定价计划,其中仅对于由用户消耗的资源进行支付。云计算用户应该注意四个主要资源,CPU、RAM、数据存储和带宽。此外,在最低价格的基础上选择云托管服务提供商不是一个好的选择,用户应该考虑其特定资源需求,然后选择适当的提供商。9总成本云托管服务提供商往往隐藏使用他们的服务的总成本,使用户专注于他们的广告上的价格。必须要搞清楚他们对用户施加的附加费用。其中包括:订阅费用:为使用特定级别的资源而支付的每月费用软件许可费:使用操作系统和数据库软件图像的费用在开始时经常不在总成本里面突发资源定价:使用高于订阅级别的资源的成本增加。10金融安全在选择云托管服务提供商时要考虑的另一个重要方面是公司的长期可行性,在这方面,必须找到下?问题?答案:云服务提供商运行了多长时间?他们财务状况良好吗?他们有足够的资金吗?是否有合并或收购的可能?潜在的云服务提供商的技术和流程是否符合IT行业领先组织的建议?云南蓝队网络科技有限公司成立于2008年3月,注册资金1000万,多项互联网产品现已达国内领先水平,是云南互联网领军企业。蓝队云在满是以上10大需求的同时,竭诚为您提供优质服务!虚拟主机篇虚拟主机也叫虚拟空间,是一块磁盘上划分的众多单元,每个单元共同分享着一台服务器的所有资源。如1000G的磁盘,按照每个虚拟主机1G,那么这台服务器就可以划分成1000个虚拟主机。虚拟主机开通和使用简单,共享型的虚拟主机较多,IP为共享,需要域名解析后再进行绑定虚拟主机,独立IP型虚拟主机,一个虚拟主机一个IP,但其他资源依旧受到整台服务器的影响。虚拟主机是目前被选择使用最多的。01服务器所在机房高速、安全、稳定蓝队云虚拟主机云南服务器放置于昆明电信牛街庄机房,国家四星级机房,400G大带宽出口,严格的机房管控制度。其他国内外机房均属于当地正规知名机房,我司拥有服?器?权?专业从事IDC近10年,蓝队云每一台服务器都经过多番测试运行,安全稳定后才接入互联网。02高端品牌服务器做保障蓝队云虚拟主机采用的服务器均为DELL品牌服务器,全固态数据盘,千兆网络接入,采用最新windows 2008 R2和2012 R2操作系统和linux系统。无与伦比的读取和写入速度,大带宽保障,真正快速、安全、稳定?03系统自动安全数据备份数据信息对于客户来说无疑是最重要的。蓝队云服务器网站数据定期每周自动备份,数据库每天凌晨自动备份。备份保留近三个月数据。以保障每个虚拟主机内的数据信息都能完好,而不会出现丢失带来的损失。04超长的人工在线服务蓝队云不管?常工作日还是国家规定节假日都有在线值班,有对应的技术人员和商务人员7*24小时无间隙全天候人工在线服务。蓝队云致力与国内领先服务行业接轨,率先在云南互联网业中施行,让所有使用网站主机、服务器产品的客户享受到无时无刻最贴心最高效的售后保障。05网站备案速度快开通虚拟主机之后,有专业的网站备案人员会为您办理关于网站备案的相关业务。按照备案人员的要求提交相关资料后,蓝队云会在最短的时间内将您的资料上传至工信部备案系统内,蓝队云网站ICP备案通过率99.99%,备案多久送多久备案时间?服务器托管篇服务器托管是指为了提高网站的访问速度,将您的服务器及相关设备托管到具有完善机房设备、高品质网络环境、丰富带宽资源和运营经验以及可对?户的?络和?备进行实时监控的网络数据中心内,以使系统达到安全、可靠、稳定、高效运行的目的?托管的服务器由客户自己进行维护,或者由其它的授权人进行远程维护。即由用户自行购买服务器设备放到蓝队云专业IDC机房。机房简介昆明信牛?庄27局机房面积约为1700平方米,包括各个分区(核心区、VIP区、共享区、监控区、机房大门、?户接待室等),配置42U标准机架130余个。地板承重800kg/㎡,抗震强度8级,抗台风12级。室内装修全部采用标准阻燃性、防尘材料。墙面采用防静电漆,地板为防静电地板。机房区域采用12mm厚清玻璃,并带8k镜面不锈钢幕墙间隔。昆明电信IDC机房依托中国电信完善的数据网络,目前机房出口带宽超过1200G,拥有丰富得的出口带宽,高?接入互联网。采用世界先进的核心交换设备,可以提供极为强大的网络通信能力,满足各个级别用户的应用需求。1200G带宽直通CHINA169骨干网,双星型冗余拓扑CISCO高性能路由器和交换机为各种服务器提供快速可靠的支持。用户无需自己购买服务器,根据业务需要,提出硬件配置要求;采用灵活的付款方式,租用蓝队云的服务器和网络带宽;可自行安装操作系统及相应软件,完全自主管理;实现低成本的共享或公网数据中心高速带宽的专属高性能服务器;有效解决用户自行维护服务器的烦恼。蓝队热线:400-6123-512蓝队网址:www.landui.com扫描二维码进?蓝队官方微信
CentOS作Linux系统,刚装到虚拟机里面,发现默认的用户无法开启系统权限。终端中输入sudo后提示“XXX is not in the sudoers file. This incident will be reported.” 上网搜搜,找到了解决办法:用sudo时提示"xxx is not in the sudoers file. This incident will be reported.其中XXX是你的用户名,也就是你的用户名没有权限使用sudo,我们只要修改一下/etc/sudoers文件就行了。下面是修改方法: 1)进入超级用户模式。也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。(当然,你也可以直接用root用) 2)添加文件的写权限。也就是输入命令"chmod u+w /etc/sudoers"。 3)编辑/etc/sudoers文件。也就是输入命令"vim /etc/sudoers",输入"i"进入编辑模式,找到这一 行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名),然后保存(就是先按一 下Esc键,然后输入":wq")退出。
当各位在安装、重装时出现could not start the service mysql error:0原因: 卸载mysql时并没有完全删除相关文件和服务,需要手动清除。 安装到最后一步execute时不能启动服务的解决方法: 首先,在管理工具->服务里面将MySQL的服务给停止(有的是没有安装成功,有这个服务,但是已经停止了的),win+R—>cmd,打开命令提示符窗口,输入命令:sc delete mysql(查看服务,此时服务中已没有mysql),将已停的服务删除,卸载MySQL记得选择remove。最后将MySQL安装目录删除,还有数据库的目录也删除。 然后,命令提示符下输入regedit,打开注册表把注册表中 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL将相关目录下的mysql相关键值(mysql、mysqladmin)删掉注册表中有关MySQL的东西可能删除的不彻底,ctrl+F查找mysql,之后用F3循环查找,将有关MySQL这个软件的全部有关项删除注意: (删除项时出错):无法删除 LEGACY_MYSQL51(自己建数据库时置的用户名): 删除项时出错。解决办法:注册表项里右键增加administrators所有权限,之后打开360安全卫士或金山卫士清理一下注册表!接着,删除MYSQL数据表目录(C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/)(Application Data是隐藏的,要在查看里面将其设置为显示 win7下一般在C:ProgramDataMySQL目录下,注意ProgramData这个文件夹默认是隐藏的), 最后,重启计算机,重新安装mysql, 运行向导Server Instance Configuration wizard,进行相关设置即可。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table)。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访?Internet,那么就需要将这台机器的IP地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。1.命令格式:route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]] 2.命令功能:Route命令是用于操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主机或者一个网络通过一个网络接口,如eth0。当使用"add"或者"del"参数时,路由表被修改,如果没有参数,则显示路由表当前的内容。3.命?参数:-c 显示更多信息-n 不解析名字-v 显示详细的处理信息-F 显示发送信息-C 显示路由缓存-f 清除所有网关入口的路由表。 -p 与 add 命令一起使用时使路由具有永久性。 add:添加一条新路由。del:删除一条路由。-net:目标地址是一个网络。-host:目标地址是一个主机。netmask:当添加一个网络路由时,需要使用网络掩码。gw:路由数据包通过网关。注意,你指定的网关必须能够达到。metric:设置?由跳数。Command 指定您想运行的命令 (Add/Change/delete/Print)。 Destination 指定该路由的网络目标。 mask Netmask 指定与网络目标相关的网络掩码(也被称作子网掩码)。 Gateway 指定网络目标定义的地址集和子网掩码可以到达的前进或下一跃点 IP 地址。 metric Metric 为路由指定一个整数成本值标(从 1 至 9999),当在路由表(与转发的数据包目标地址最匹配)的多个路由中进行选择时可以使用。 if Interface 为可以访问目标的接口指定接口索引。若要获得一个接口列表和它们相应的接口索引,使用 route print 命令的显示功能。可以使用十进制或十六进制值进行接口索引。4.使用实例:实例1:显示当前路由命令:routeroute -n输出:[root@localhost ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.120.0 * 255.255.255.0 U 0 0 0 eth0e192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth010.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth0default 192.168.120.240 0.0.0.0 UG 0 0 0 eth0[root@localhost ~]# route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.120.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth010.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth00.0.0.0 192.168.120.240 0.0.0.0 UG 0 0 0 eth0说明:第一行表示主机所在网络的地址为192.168.120.0,若数据传送目标是在本局域网内通信,则可直接通过eth0转发数据包;第四行表示数据传送目的是访问Internet,则由接口eth0,将数据包发送到网关192.168.120.240其中Flags为路由标志,标记当前网络节点的状态。Flags标志说明:U Up表示此路由当前为启动状态H Host,表示此网关为一主机G Gateway,表示此网关为一路由器R Reinstate Route,使用动态路由重新初始化的路由D Dynamically,此路由是动态性地写入M Modified,此路由是由路由守护程序或导向器动态修改! 表示此路由当前为关闭状态备注:route -n (-n 表示不解析名字,列出速度会比route 快)实例2:添加网关/设置网关命令:route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0输出:[root@localhost ~]# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0[root@localhost ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.120.0 * 255.255.255.0 U 0 0 0 eth0192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth010.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth0224.0.0.0 * 240.0.0.0 U 0 0 0 eth0default 192.168.120.240 0.0.0.0 UG 0 0 0 eth0[root@localhost ~]# 说明:增加一条 到达244.0.0.0的路由实例3:屏蔽一条路由命令:route add -net 224.0.0.0 netmask 240.0.0.0 reject输出:[root@localhost ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.120.0 * 255.255.255.0 U 0 0 0 eth0192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth010.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth0224.0.0.0 - 240.0.0.0 ! 0 - 0 -224.0.0.0 * 240.0.0.0 U 0 0 0 eth0default 192.168.120.240 0.0.0.0 UG 0 0 0 eth0[root@localhost ~]# route del -net 224.0.0.0 netmask 240.0.0.0[root@localhost ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.120.0 * 255.255.255.0 U 0 0 0 eth0192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth010.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth0224.0.0.0 - 240.0.0.0 ! 0 - 0 -default 192.168.120.240 0.0.0.0 UG 0 0 0 eth0[root@localhost ~]# route del -net 224.0.0.0 netmask 240.0.0.0 reject[root@localhost ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.120.0 * 255.255.255.0 U 0 0 0 eth0192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth010.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth0default 192.168.120.240 0.0.0.0 UG 0 0 0 eth0[root@localhost ~]# 说明:增加一条屏蔽的路由,目的地址为 224.x.x.x 将被拒绝实例4:删除路由记录命令:route del -net 224.0.0.0 netmask 240.0.0.0route del -net 224.0.0.0 netmask 240.0.0.0 reject输出:[root@localhost ~]# route del default gw 192.168.120.240[root@localhost ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.120.0 * 255.255.255.0 U 0 0 0 eth0192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth010.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth0[root@localhost ~]# route add default gw 192.168.120.240[root@localhost ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.120.0 * 255.255.255.0 U 0 0 0 eth0192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth010.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth0default 192.168.120.240 0.0.0.0 UG 0 0 0 eth0[root@localhost ~]#
这篇文章主要介绍了IIS7.5 配置自定义后缀的ASP文件 无法执行 总是提示下载的解决方法,需要的朋友可以参考下在IIS6上的配置很简单.比如,我把ASP的后缀自定义为.do后.在IIS6上只需要添加对应的处理程序映射把.asp的配置复制后,新建一个.do的,配置好后,就能执行.do了.没有一点问题.现在在IIS7.5中,我怎么配置都不能成功.添加了处理程序映射,也添加了MIME,怎么都不行.真不知道IIS升级后,怎么这么麻烦.前两天我也把站点从IIS6.0迁移到IIS7.5,也发现了楼主同样的问题,分享一下解决方案。------------------------------1,安装好IIS7.5;2,发布站点,删除原站点根目录下的web.config文件;3,配置站点,如ASP启用父目录、ASP最大请求实体主体限制、处理程序映射……等等;4,文本编辑器打开新的web.config:<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <httpErrors> <remove statusCode="500" subStatusCode="-1" /> <error statusCode="500" prefixLanguageFilePath="inetpubcusterr" path="500-100.asp" responseMode="File" /> </httpErrors> <directoryBrowse enabled="false" /> <defaultDocument> <files> <clear /> <add value="index.新后缀" /> <add value="default.新后缀" /> </files> </defaultDocument> <handlers> <add name="ASP-新后缀" path="*.新后缀" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%system32inetsrvasp.dll" resourceType="File" requireAccess="Script" /> </handlers> </system.webServer> </configuration>注意:在动词verb一栏必须都是大些,requireAccess修改成脚本模式即"Script",保存web.config后重启站点
Vim/Vi 没有菜单,只有命令Vim/Vi 工作模式介绍:插入模式 和 命令模式 是vi的两个基本模式。——插入模式 ,是用来编写文本内容的。——命令模式,是用来编辑文本,如上下翻页等,复制粘贴,跳?到指定行等操作当前编辑的顶部或者底部会显示vim处于何种模式下。如:mode:COMMAND!进入和退出vim编辑器:进入 vi filename(要编辑的文件名字)———>进入了命令模式命令模式——>输入 :wq——>退出保存退出:wq 保存修改并退出ZZ 快捷键,保存修改并退出(前面没有冒号):q! 不保存退出:wq! 强行保存退出,(文件所属者科忽略文件的制度属性):w 保存不退出:wqa 保存所有文件:w new_filename 另存为指定文件vim配置文件 所在目录~/.vimrc1.修改配置文件时,可以不用加:2.可将编辑模式下的命令写在里面,每个命令单独一行,这样每次启动时,会自动执行里面的命令。~ home directoryroot /rootusers /home zhangsan /home/zhamgsan命令模式——>输入i(或者ao) ——> 插入模式i insert还可以输入其他的字母,来进入插入模式:___________________________________________________________________________-插入命令命令 作用a 在光标后附加文本A 在本行行末附加文本i 在光标前插入文本I 在本行开始插入文本o (字母) 在光标下插入新行O (字母) 在光标上插入新行插入模式———> ESc键———>命令模式 http://www.dabu.info/?p=801如果要保存文件,就要从插入模式切换为命令模式才行命令模式——>: ——> 编辑模式编辑模式———>命令行回车结束运行——>命令模式在编辑模式执行完命令后,会自动回到命令模式——————————————————————————————定位命令命令 作用h、方向左键 左移一个字符j、 方向下键 下移一行k、方向上键 上移一行l、 方向右键 右移一个字符$ 移至行尾0 移至行首_______________________________________H 移至屏幕上端M 移至屏幕中央L 移至屏幕下端( (左小括号)移动到上一个句子首) (右小括号)移动到下一个句子首{ (左大括号)移动到上一个段落首} (右大括号)移动到下一个段落首快速定位,括号匹配, %在command模式下。当文本中存在 ( ,{ ,[ ,等符号时可以通过输入 % (就是按shift键和数字5键) 来跳到括号对应的位置[[ 光标跳转到代码块开头即{处,要求{独占一行gD 光标跳转到局部变量定义处'' (两个单引号)光标跳转到上次停靠处————————————————————————————快速定位 ,行头与行尾 0 与 $在command模式下,命令 作用0(数字0键) 移至行首(把光标移至当前行的起始位置,第一个非空白字符之前,简单点说就是^ 的前面)^(尖角号) 把光标移至当前行的起始位置,也即当前行的第一个非空白字符位置<HOME> 移动到本行第一个字符。同0健。$(就是按shift键和数字4键) 移至行尾n$ 移动到下面(包括光标所在行)n行的行尾。—————————————————————————-单个词组操作光标移动命令:命令 作用W (大写) 移动到下一个单词的首位置(如果连个单词直接有 逗号连接,则认为是一个单词)w(小写) 将光标右移一个单词的首位置。光标停留在下一个单词的首位置(两单词有逗号相连,则认为逗号也是一个单词),注意:如果已到行尾,则转至下一行行首nw 向左移动n个单词,光标停在单词的首位置e 移动到单词末尾(把光标移至当前所在单词(或下一个单词)的最后一个字符位置)ne 和nw类似,只不过光标停留在单词的尾部E 和小写用法一样,只是以空格字符作为字的分隔符。nEb 移动到单词的头部(如果光标已经在单词的头部,则将光标左移一个单词。光标停留在下一个单词的字首位置)nb 和nw类似,只不过这是向右移动B 将光标左移一个单词,只是以空格字符作为字的分隔符。光标停留在下一个单词的单词首位置位置(如果连个单词直接有 逗号连接,则认为是一个单词)nB注意:上面这些命令都使用’iskeyword‘选项中的字符来确定单词的分界,还有几个命令,只把空白字符当做”单词“的分界。当然,这里说的” 单词“已经不是传统意义上的单词了,而是由非空白字符构成一串字串。命令”W“移动光标到下个字串的开始,命令”B“移动到上个字串的开始;命令”E“移 动到下个字串的结尾,命令”gE“移动到上个字串的结尾。和上面的命令比较一下,发现什么规律没有?————————————————————————————多个词组光标移动:上面我们掌握了单个词组的移动,如果需要移动多个词组的光标,只需要在使用前加上要移动的词组的个数即可。一个英文字母的宽度是1,两个字母的宽度等?一个汉字的宽度。举例如下:Example : ABC DEF GHI JKL MNO PQR STUVW假设光标现在处于Example的E处。并且vim处于command模式。那么我们先按 数字3键 ,再按w键。光标就会跳到JKL的J处。————————————?———————————-vim重复输入文本:举例:我们要输入gogogo。方法如下:vim在COMMAND模式下,先按数字3键,然后按 i键,在输入go,再按Esc键。就可以输入gogogo了。还有,如将数字加在命令前,标示该命令处理几次,如5dd标示执行5次dd(删除光标所在整行)操作。. (英文句号)为命令重复命令,按下一次执行一次上一次执行过的命令。————————————————————————————快速定位,行头与行尾 0 与 $在command模式下,命令 作用$(就是按shift键和数字4键) 移至行尾0(数字0键) 移至行首(把光标移至当前行的起始位置,第一个非空白字符之前,简单点说就是^ 的前面)^(尖角号) 把光标移至当前行的起始位置,也即当前行的第一个非空白字符位置————————————————————————————————快速行定位,跳到指定的行, g 与 G命令 作用:set nu 设置行号:set nonu 去想行号:set nu! 取消显示行号gg 到第一行G 到最后一行nG 到第n行:n 到第n行Ctrl + e 向下滚动一行Ctrl + y 向上滚动一行Ctrl + d 向下滚动半屏Ctrl + u 向上滚动半屏Ctrl + f 向下滚动一屏Ctrl + b 向上?动一屏—————————————————————————-快速定位,字母查找 f 与 F:在command模式下,通过按 f 或者 F 快速定位内容。(不需要输入冒号)命令 作用f 想后查找F 向前查找可以结合数字来进行多次查找,如按下 3fq ,就会放下查找第三个q如果不加数字,如 fq ,就会向后查找第一个q——————————————————--——————查找光标下的相同词组, * 与 #通过 * ,可以往后查找光标停留位置相同的词组。 # 是向前超找举例:假设光标停留在第一个if处if we are god if you are human我们在command模式下,输入 * ,光标就会跳到“if you are human”的那个if上去——————————————————————————————————————————————————————字符替换命令模式下r (小写)替换光标所在处一个字符,如ra,就是将当前光标所在处字符替换为aR (大写)开始替换,直到按ESC键退出替换,相当于按下键盘上到insert键cc (小写)取代光标所在整行S (大写)与ss(小写)效果相同C (大写)取代到行尾,包括光标处字符c0 (小写,数字0)取代到行首,不包括光标处字符c^ (小写)与c0(小写,数字0)效果相同___字符串单词搜索和替换命令______________________________________#命令模式下命令 作用/string 向前搜索指定字符串?string 从光?处开始向上开始查找字符从stringvim中有一些特殊字符在查找时需要转义 .*[]^%/?~$set ic 查找时,忽略大小写set noic 查找时,不忽略大小写:nohlsearch 关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。:set incsearch 逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。:set wrapscan 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。n 查找模式下,搜索指定字符串的下一个出现位置N 查找模式下,往上找指定字符串出现的位置s/old/new/ 用old替换new,替换当前行的第一个匹配s/old/new/g 用old替换new,替换当前行的所有匹配:%s/old/new/ 用old替换new,替换所有行的第一个匹配:%s/old/new/g 全文替换指定字符串:n1 ,n2s/old/new/g ?一定范围内替换指定字符串若将g改为c,就会询问是否替换。在替换文本old或new中有特殊字符,如“/”等,都需要用进行转义贴上两篇关于vim替换的文章:语法为 :[addr]s/源字符串/目的字符串/[option]全局替换命令为::%s/源字符串/目的字符串/g[addr] 表示?索范围,省略时表示当前行。如:“1,20” :表示从第1行到20行;“%” :表示整个文件,同“1,$”;“. ,$” :从当前行到文件尾;s : 表示替换操作[option] : 表示操作类型如:g 表示全局替换;c 表示进行确认p 表示替代结果逐行显示(Ctrl + L恢复屏幕);省略option时仅对每行第一个匹配串进行替换;如果在源字符串和目的字符串中出现特殊字符,需要用””转义下面是一些例子:#将That or this 换成 This or that:%s/(That) or (this)/u2 or l1/—-#将句尾的child换成children:%s/child([ ,.;!:?])/children1/g—-#将mgi/r/abox换成mgi/r/asquare:g/mg([ira])box/s//mg//my1square/g <=> :g/mg[ira]box/s/box/square/g—-#将多个空格换成一个空格:%s/ */ /g—-#使用空格替换句号或者冒号后面的一个或者多个空格:%s/([:.]) */1 /g—-#删除所有空行:g/^$/d—-#删除所有的空白行和空行:g/^[ ][ ]*$/d—-#在每行的开始插入两个空白:%s/^/> /—-#在接下来的6行末尾加入.:.,5/$/./—-#颠倒文件的行序:g/.*/m0O <=> :g/^/m0O—-#寻找不是数字的开始行,并将其移到文件尾部:g!/^[0-9]/m$ <=> g/^[^0-9]/m$—-#将文件的第12到17行内容复制10词放到当前文件的尾部:1,10g/^/12,17t$~~~~重复次数的作用—-#将chapter开始行下面的第二行的内容写道begin文件?:g/^chapter/.+2w>>begin—-:/^part2/,/^part3/g/^chapter/.+2w>>begin—-:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$第二篇:vi/vim 中可以使用 :s 命令来替换字符串。该命令有很多种不同细节使用方法,可以实现复杂的功能,记录几种在此,方便以后查询。:s/vivian/sky/ 替换当前行第一个 vivian 为 sky:s/vivian/sky/g 替换当前行所有 vivian 为 sky:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一?所有 vivian 为 skyn 为数字,若 n 为 .,表示从当前行开始到最后一行:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky可以使用 # 作为分隔符,此时中间出现的 / 不会作?分隔符:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky:s/vivian/sky/g 替换当前行所有 vivian 为 sky2. :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 为 sky4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/5. 删除文本中的^M问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。。 使用命令:cat filename1 | tr -d “^V^M” > newfile;。 使用命令:sed -e “s/^V^M//” filename > outputfilename.需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M.你必须要手工进行输入,而不是粘贴。。 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//.。 :%s/^M$//g如果上述方法无用,则正确的解决办法是: [Page]。 tr -d "\r" < src >dest。 tr -d "\015" dest。 strings A>B6. 替换确认我们有很多时候会需要某个字符(串)在文章中某些位置出现时被替换,而其它位置不被替换的有选择的操作,这就需要用户来进行确认,vi的查找替换同样支持例如:s/vivian/sky/g 替换当前行所有 vivian 为 sky在命令后面加上一个字母c就可以实现,即:s/vivian/sky/gc顾名思意,c是confirm的缩写7. 其它利用 :s 命令可以实现字符串的替换。具体的用法包括::s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1:。,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1:g/str1/s//str2/g 功能同上从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作(原文地址: http://wzgyantai.blogbus.com/logs/28117977.html) ddp 交换光标所在行和其下紧邻的一行(dd剪切当前行,p粘贴)* 向下完整匹配 光标所在处 的单词# 向上完整匹配 光标所在处 的单词g* 向下部分匹配 光标所在处 的单词g# 向上部分匹配 光标所在处 的单词转载请表明出处http://www.dabu.info/?p=801_________________________________________命令 作用r 取代光标所在处字符R 从光标所在处开始替换字符,按Esc结束R命令会将键盘所输入内容逐个覆盖光标所在处以后的字符___________________________________________________删除命令/剪切命令命令 作用x 删除光标右边的字符nx 删除光标所在处左边n个字符X 删除光标左边的字符nX 删除光标左边n个文字d 用于剪切删除文字dl 删除当前字符, dl=xdh 删除前一个字符dw 删除光标之后的单词剩余部分,如果光标在单词字首位置,则删除光标右边第一个单词dnw 删除光标之后的单词剩余部分和n个单词。如果光标在单词字首位置,则删除光标后面n个单词db 删除到某个单词的开始位置de 删除一个单词dne 删除光标后面n个单词dd 删除光标所在行,ndd删除n行ndd 删除光标所在行向下 n 行,例如 20dd 则是删除 20 行(常用)dj 删除上一行dk 删除下一行dG 删除光标所在行到文件末尾的内容d1G 删除光标所在行到第一行的所有数据dgg 删除当前行到文件首部的所有行(包括当前行)jdG 删除当前行之后所有行(包括当前行)D 删除当前字符至行尾,D=d$d$ 与D效果相同d0 是数字0)删除到行首,不包含光标处的字符d^ 与d0效果相同:n,$d 删除n行及以后所有的行:1,$d 删除所有行: n1,n2d 删除n1行到n2行之间的行范例::6655,6665ddl 删除字符 (缩写: "x")diw 删除内含单词daw 删除一个单词diW 删除内含字串 (见 |WORD|)daW 删除一个字串 (见 |WORD|)dis 删除内含句子das" 删除一个句子dib 删除内含 '(' ')' 块dab 删除一个 '(' ')' 块dip 删除内含段落dap 删除一个段落diB 删除内含 '{ ' ' }' 大块"daB" 删除一个 '{ ' ' }' 大块___________复制剪切粘贴命令______________________________x命令 作用yy、Y 复制当前行nyy,nY 复制当前行一下n行(包括当前行)p、P 粘贴在当前光标所在行下或行上ddp 交换当前行和其下一行dd 剪切当前行ndd 剪切当前行一下n行(包括当前行):1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。:1, 10 m 20 将第1-10行移动到第20行之后。_____________________________________________________________________________块编辑Ctrl+V 进入块选择/块编辑模式/块选择LINUX下是Ctrl-v,但是在windows下的GVIM,Ctril-v是粘贴。所以,windows下按 Ctrl-q 进入块(列)编辑v:字符选择,会将光标经过的地方反白选择V:行选择,会将光标经过的行反白选择[ctrl]+v:块选择,可以用长方形的方式来选择数据y:复制反白的地方d:删除反白的地方p 粘贴到上一行P(大写的) 粘贴到下一行$ 将块选择中的每一行都扩展至行尾h 停止上面的状态Ixxx<Esc> 在被选中的块的前面插入xxx0Ixxx<Esc> 在被选中的块的每一行的行首插入xxxAxxx<Esc> 在被选中的块?后面追加xxx$Axxx<Esc> 在被选中的块的每一行的行尾追加xxxcxxx<Esc> 在被选中的块中删除被选中的块并以xxx替代Cxxx<Esc> 在被选中的块中删除被选中的块一直到第一行行尾,并以xxx替代rx 把被选中的块中的所有字符都替换成x~ 交换大小写U 小写变大写u 大写变小写> 将被选中的块向右移动一个shift单位,空出来的地方填补空格< 同上,但是是向左移动,但是移动的单位同时受限于左边的边界J 将下一行附在当前行的末尾,本行的尾空格与下一行的头空格全都只用一个空格代替gJ 同上,但是不对原文本内容做任何改动:read a.txt将a.txt读入并放在当前行的下一行:$r a.txt将a.txt读入并放在当前文件的最后:0r a.txt将a.txt读入并放在当前文件的最开始:.,$w tmp将当前行到最后一行写入tmp文件中:.,$w! tmp将当前行到最后一行写入tmp文件中,即使tmp已存在:.write >>tmp将当前行追加到tmp文件gU 将字符变大写gUl 将当前字符变大写gUw 将当前字符至该word结束变大写gU$ 将当前字符至行尾变大写gUgU 将当前整行变大写,可省略为gUUgu 将字符变小写gul 将当前字符变小写guw 将当前字符至该word结束变小写gu$ 将当前字符至行尾变小写gugu 将当前整行变小写,可省略为guug~ 改变字符大小写g~l 改变当前字符大小写g~w 改变当前字符至该word结束大小写g~$ 改变当前字符至行尾大小写g~g~ 改变整行字符大小写,可省略为g~~:[range]![shell command] 以range范围内的文本作为输入去执行command命令,并将结果覆盖写回range中或者用光标移动符代替:[range]:read ![shell command] 运行command并将输出写到当前行的下面:0r ![shell command] 同上,输出被写入文件开头:write ![shell command] 运行command并将整个文件写入到command的输入:.w ![shell command] 同上,只会将当前行输入给commandCtrl+L 重绘屏幕:%s/<four>/4/g 将文件中所有的单词four替换成4vim *.cppqq:%s/<GetResp>/GetAnswer/ge<Esc>:wnq9999@q 将所有cpp文件打开并把所有的GetResp单词换成GetAnswer:%s/([^,]*), (.*)/2 1/ 将文件中所有的First, Last形式替换成Last First形式g Ctrl+g 统计字数(要统计某一块具体的字数可以使用visual模式)K 查找man页:%s/s+$// 删除所有行末空白————————————————————————————————WINDOWS下的GVIM的块选择命令是:在gvim(windows版)中,块选择的快捷键不是<Ctrl-v>,此快捷键为粘贴。先按V(貌似可以不按v),在按组合键Ctrl-q,然后使用hjkl来移动光标选择块。快速选择多行,如果用 hjkl慢慢移动就太慢了,所以,我们选择多行,可以先输入行号,然后输入G(就是shift+g)。一般的选择模式为:v(小写),此时会显示:可视。行选择模式为:V(大写),此时会显示:可视-行。最凶残的块选择模式则为:<Ctrl-q>,此时会显示:可视-块。如果希望批量插入注释,则为以下操作顺序:1、移动光标到注释块的第一行。2、按Esc进入Normal模式。3、按<Ctrl-q>进入块选择模式。4、用h、j、k、l 键向下移动光标(注意:这里只能用这四个键移动,不支持方向键)。5、选中相应的行后,按I(大写)键。6、输入//,并按Esc键,完成注释。注意:gvim中ctrl +v 变成粘贴,如果你按下 Ctrl + v 没能进入列选择模式,请看这里)是因为vim的设计者用了个mswin.vim,以此能够使用windows的快捷键粘贴,撤销等。但是这又会和vim本 身的快捷键冲突。http://edyfox.codecarver.org/html/vimrc_mswin.html 。我们还可以通过注销gvim的vimrc配置文件注销与 mswin.vim相关的行,则可以直接使用ctrl+v进入块选择模式————————————————————————————-重复执行操作很多时候一个操作,我们要执行几遍。通过 . 来进行重复的操作举例:假设光标在abc处。我们来重复删除2个单词:abc bdf sdfe erwer eete wer uty在command模式下,先输入 d2w ,然后 输入 . (英文的句号) ,就会不断执行删除两个单词的操作,按多少次 . 就重复多少次————————————————————————————————————————————撤销操作:如果编辑文本输错了,可在命令模式下按 u键 撤销 和 ctrl+R 返回撤销u 取消上一步操作(最多连续取消500次)Ctrl+r 恢复上一步被撤销的操作U 撤销当前一行的操作—————————————————————————————————自动补齐C-n 匹配下一个关键字C-p 匹配上一个关键字———————————————---------------------------简单排版:ce(nter) 居中显示光标所在行:ri(ght) 靠右显示光标所在行:le(ft) 靠左显示光标所在行J 将光标所在下一行合并到光标所在行>> 光标所在行增加缩进(一个tab)<< 光标所在行减少缩进(一个tab)n>> 光?所在行开始的n行增加缩进n<< 光标所在行开始的n行减少缩进——————————————————————————————————————————————多tab|窗口拆分:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab:tabc 关闭当前的tab:tabo 关闭所有其他的tab:tabs 查看所有打开的tab:tabp 前一个:tabn 后一个关闭窗口:close 最后一个窗口不能使用此命令,可以防止意外退出vim。:q 如果是最后一个被关闭的窗口,那么将退出vim。标准模式下:gt , gT 可以直接在tab之间切换。还有很多他命令, 看官大人自己, :help table 吧。:new 水平切割窗口:split 水平切割窗口(或者直接输入 :sp 也可以):vsplit 垂直切割( 也可以 :vs )Ctrl+ww 移动到下一个窗口或者 先按组合键ctrl+w ,然后都松开,然后通过j/k/h/l(等于vim移动的方向键) 来移动大哦哦左/上/下/右的窗口Ctrl+wj 移动到下方的窗口Ctrl+wk 移动到上方的窗口vim -o a.txt b.txt c.txt为每一个文件打开一个水平分割窗?vim -O a.txt b.txt c.txt为每一个文件打开一个垂直分割窗口:only 录制宏。按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa。。。q录制名为a的宏,@a使用这个宏。vim中的几个文本对象:aw 一个单词; as 一个句子; ap 一个段落zfap 创建一个段落的折行zc 关闭折行zo 打开折行———————————————————————————————————vimdiff a.txt b.txt打开a.txt和b.txt并进行比较(这个是shell中的命令):vertical diffsplit a.txt打开分割窗口用于比较当前文件和a.txt:set scrollbind同步滚动 noscrollbind不同步滚动qa 将后续命令录制在寄存器a中(从a到z有26个可用)q 停止录制@a 执行寄存器a中录制的命令@@ 执行刚刚执行过的寄存器中的命令qA 向寄存器a中追加命令"Ayy 将当前行追加复制到寄存器A中:[range]s+from+to+[flags] 把range范围内的from替换成to:[range]s=from=to=[flags] 把range范围内的from替换成to:[range]s/from/to/[flags] 把range范围内的from替换成torange为空时,只对当前行有效range为%时,对所有行都有效flags为空时,只替换指定行的第一个fromflags有g时,替换指定行的所有fromflags有c时,要求用户对每次替换进行确认flags有p时,要求:s命令列出所有改变的行flags有e时,要求:s命令在没有找到任何匹配时也不要报错:1,5s/from/to/g 把第1行到第5行中所有的from替换成to:3s/from/to/g 把第3行中所有的from替换成to:.write a.txt 把当前行写入a.txt:.,$s/from/to/g 把当前行到文件结束所有的from替换成to:?^Chapter?,/^Chapter/s/from/to/g 把上一个Chapter到下一个Chapter之间的所有from替换成to:.+3,$-5s/from/to/g 把当前+3行到倒数第5行的全部from替换成to:'a,'bs/from/to/g 把从a标记的行到b标记的行(包含a和b行)中全部from替换成to,注意是单引号不是倒引号:[range]g/{pattern}/{command} 在range范围内找到匹配pattern的行然后执行command命令这里的command必须是:开头的命令,而不能直接使用normal模式下的命令,除非使用|:normal|————————————————————————————————————————--~ 改变光标所?字符的大小写,并将光标移动到下一个字符上:edit foo.txt在vim中开始编辑另一个文件:edit! foo.txt强制丢弃当前未保存的修改:next 转到下一个文件,可以缩写为:n:next! 强制丢弃未保存的修改并转到下一个文件:wnext 保存当前文件的修改并转到下一个文件:previous 转到上一个文件:wprevious 保存当前文件的修改并转到上一个文件:last 转到最后一个文件:first 转到第一个文件:2next 转到下面第二个文件:bn 转到下一个文件,若到最后一个文件,则转到第一个文件:bp 转到上一个文件,若到第一个文件,则转到最后一个文件:args 查看整个列表中有哪些文件:args a.txt b.txt c.txt重新定义一个文件列表:args *.txt打开所有txt文件Ctrl+^ 快速切换到上一个文件`" 移动光标到上一次离开该文件时光标所在的位置`. 移动光标到最后一次对文件做出修改的位置mA 设置当前位置为全局标记A(大写字母)`A 跳转到全局位置A,即使它不在当前文件内:set backup生成备份文件"fy 把选中的内容复制到寄存器f中"fp 把寄存器f中的内容粘贴出来"wdaw 把光标所在的word删除并放入寄存器w中:write >> logfile把当前文件写入(追加)到logfile中vim -R 只读打开vim -M 强制禁止修改打开:edit a.txt打开文件a.txt:saveas b.txt把当前缓冲区存入b.txt并同时打开b.txt进行编辑:file c.txt把当前文件的名字改为c.txt———————————————————————————————————————————————书签mx 设定书签,x是任意一个字母,通常小写(a-z),x为小写字母时,局限在一个文件之间切换;大写字母时,可在文件之间切换.`x (`位于数字键1旁边)跳转到书签x:marks 查看标签#############################################实例#########################################应用实例导入文件或shell执行结果到正在编辑的文件中:r 文件名:r /etc/issue 将issue内容导入正在编辑的文件中:!shell命令 在vim中?行shell命令,执行完后按回车会到vim界面:r !shell命令 (r与!之间有空格)将shell命令执行的结果导入到本文件中在Vi中执行命令 :!命令:!ls /root 在编辑文件同时查看/root下的文件情况不用退出vim:r !date 在vim下将date命令的结果导入编辑文件中定义快捷键 :map 快捷键 触发命令ctrl+v 再ctrl+p 或者直接ctrl+v+p ,不要把^当做尖角号,:map ^x 命令 (map与^之间、x与命令之间有空格,此处到^并非键盘上的^,而是按下ctrl+v出现到快捷键,表示ctrl键,后面到x为任意字母)按下ctrl+x后会执行对应到命令例::map ^p I#<ESC> 当按下ctrl+p快捷组合键时,在光标所在行行首添加一个#号,并回到命令模式范例: :map ^P I#<ESC>ctrl+p=插入#号然后回到命令模式I表示vim的插入命令:map ^E iksharpdabu@qq.comctrl+E=插入,i表示当前光标处插入:map ^B 0xctrl+B=将光标移至行首删除光标所在字符0表示移至行首,x表示删除光标所在字符连续行注释 :n1 ,n2s/^/#/g在行首加#,^表示行首:n1 ,n2s/^#//g将行首的#号删除:n1 ,n2s/^////g表示转义符替换 :ab ksharp ksharpdabu@qq.com输入ksharp,回车或者空格后,就变成了ksharpdabu@qq.com:unab ksharp ksharpdabu@qq.com取消替换连续行注释:n1,n2/^/#/g (#号为注释符号,在shell中注释符号为#,C++中为//):n1,n2/^////g C++源文件多行连续注释——————————————————————————————————————————————-相关插件设置########################################phpcomplete插件如何使用:vi index.php插入一段php代码后比如:htmlsp先按下 Ctrl+x进入^X模式,再按下 Ctrl+o, 就能看到提示列表框,以及对应的function,还有对应的函数定义比如参数等等Ctrl+n, Ctrl+p 来上下选择,ESC 来取消提示在Insert模式下:<backspace> 删除光标前的一个字符<del> 删除光标所在的一个字符Ctrl+W 删除光标前的一个单词Ctrl+U 删除光标前的一个行(按照输入顺序,不一定直接删到行首)Ctrl+p 补全单词Ctrl+n 补全单词(向前查找)Ctrl+x Ctrl+f 补全文件名Ctrl+x Ctrl+l 补全整行内容Ctrl+a 补全上一次insert模式下插入的内容Ctrl+v 插入一个由ascii码表示的符号,三位ascii码或者遇到第一个非数字时生效————————————————————————————————————————————------########################################auto pair插件(自动封闭括号等) 关闭/开启 ctrl+p##########################################netrw.vim插件vim中查看到文件的目录结构:e /home/zebra/myprogram/src附带的操作目录文件快捷键如下:<F1> 显示帮助<cr> 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件- 返回上级目录c 切换vim 当前工作目?正在浏览的目录d 创建目录D 删除目录或文件i 切换显示方式R 文件或目录重命名s 选择排序方式x 定制浏览方式, 使用你指定的程序打开该文件###################################################"taglist插件:TlistOpen:TlistClose################################################"NERDTree 插件map <F6> :NERDTreeToggle<CR>按键C(大写 C 键)将光标所在目录设置为根目录u(小写 u 键)转到上一级目录o(小写 o 键,不是“零”)展开(或折叠)光标所在目录的子目录。如果光标所在位置是一个文件,则在编辑窗口中打开该文件此外在目录树窗口中输入目录 :Bookmark 收藏名 还可以将光标所在目录添加到收藏夹中。下次使用 :BookmarkToRoot 收藏名 可以直接转到该目录,并且以该目录作为根目录。更多命令可以参考 NERDTree 的帮助文档。############################################################################NERD Commenter插件设置下载安装后,修改vim的配置文件,在下面加入" NERD_commenter.vim" <Leader>ca 在/*...*/与//这两种注释方式中切换(其它语言可能不一样了)let mapleader="," "leader默认是 ,为了方便,改为 逗号map <F7> <leader>c$ "注视到行尾map <F8> <leader>cc ”单行注释map <F9> <leader>cu "取消注释map <F12> <leader>ca "sexy多行代码注释/**/这种注意:leader默认符号是 ,我这里用let来修改leader 符号为逗号 ,即便如此,注释时也要同时按好几个键,比如:注释3行代码,要依次输入 3 , c 空格键 四个按键。 同时速度要快,否则就不是注释,而变成了修改文档的内容了。我当时安装NERD Commenter试了半天,都没注释成功。后来看了比人的文章,飞快的按下这几个按键,就注释成功了。但是还是太繁琐了,就修改为一个按键,就可以注释 /取消注释。按我的这样修改后,F7 注视到行尾F8 单行注释先按x,后按F8 即注释x行的代码,记得按的速度要快F9 取消注释 ,也可以与数字搭配F12 sexy的代码注释 ,也可以与数字搭配依次按 , c a 表示// 和/* */ 两种注释间切换。这个我就没设置一键操作 ,大家个以根据自己的情况改成某个按键###########################################################txtBrowser 插件<Leader>s: 用搜索引擎(可定制, 默认为google)搜索光标下的单词或选中的文本.<Leader>f: 用网络字典(可定制, 默认为google.cn)对光标下的单词或选中的文本查字典.<Leader>g: 打开光标下或选中的URL.<Leader>h: 高亮光标下的单词或选中的文本(可跨行).*: 向前搜索光标下的单词或选中的文本(可跨行)?: 向后搜索光标下的单词或选中的文本(可跨行)########################相关vim技巧#################################31.用:set list来查看所有不可见字符,反之用:set nolist关闭2.vim操作ftp,打开::e ftp://192.168.0.1/1.txt保存(如果不存在则创建)::w ftp://192.168.0.1/1.txt读取::r ftp://192.168.0.1/1.txt以上操作第一次打开时需要输入用户名和密码,以后就不用了,vim 会记住的。3.Ctrl+R 是在编辑时或者命令行界面下调入寄存器值的热键,Ctrl+R+/ 会得到上一次查询的条件,Ctrl+R+<寄存器名>; 相当于 Normal 模式下的 "<寄存器名>;p 命令4.vim在编辑一个文件时如果打开多个文件,:args <CTRL-R>;% file2 file35.如何删除连续两行之间的回车符,使连续的两行成为一行,Jx6.想显示行号,可以用 :set nu7.vim中光标在C函数和系统调用上时,按K进入man手册页8.V 打开"可视模式"(不是虚拟模式,虚拟是 virtual)后,可以有很多种办法移动光标的,不一定非得用 h j k l , 比如可以搜索定位, 也可以用 [[ ]] ][ [] } { 等段落定位的命令. v]] v[[ v} 这样就可以选中一大块,而不用一行一行地选 还有 H L 这些都可以用. 详细请 help motion 另外, vim 内置了很多以 a 打头的文本对象, 如 a{ 表示一个 {} 块, ap 表示一个段落等等。=a{ 就可以重排当前语法块.9.全选的命令是 ggVG gg表示到第一行第一个字母, V进入visual line G则到文件尾。10.vim是否支持将语法高亮度显示的结果保存为一个html文档,:TOhtml11.用:split new | r!ls 来获得外部命令的输入,其中r !ls 则表示执行外部命令 ls,并且捕获(读入)它的输出。12.vi中用``就可以回到刚才的位置,vim中用ctrl+o13.用:set ai的命令来启动自动缩进。用:syntax on命令来启动语法着色14.在"插入模式"下删除光标到行尾的字符,^od$,^o 表示同时按住 Ctrl 和 O 键,其实也可以是^oD,还有就是如果要删除到某个字符位置的话,就用^odfx,x表示要删除到的字符15.自动缩进set autoindent 和set cindent16.括号自动补全:iab ( ()17.删除所有偶数行<ESC>;ggqajddq10000@a18.排版代码gg=G19.:args查看正在编辑的文件名或者用ctrl+g20.gj gk 分别可以向下、向上移动一个物理行 切换vim目录::cd 目录路径修改当前vim编辑的文件的文件名:f 新文件名 关于代码折叠相关的快捷键,大家其实可以自己在vim中输入 :help zo 来查看打开和关闭折叠的相关解释:你可以在用户手册的第 28 章找到有关折叠的序论。|usr_28.txt|1. 折叠方法 |fold-methods|2. 折叠命令 |fold-commands|3. 折叠选项 |fold-options|4. 折叠行为 |fold-behavior|{Vi 没有折叠}{仅当编译时加入 |+folding| 特性才有效}==============================================================================1. 折叠方法 *fold-methods*可用选项 'foldmethod' 来设定折叠方法。设置选项 'foldmethod' 为非 "manual" 的其它值时,所有的折叠都会被删除并且创建新的。如果设置成 "manual",将不去除已有的折叠。可以利用这一点来先自动定义折叠,然后手工调整。有 6 种方法来选定折叠:manual 手工定义折叠indent 更多的缩进表示更高级别的折叠expr 用表达式来定义折叠syntax 用语法高亮来定义折叠diff 对没有更改的文本进行折叠marker 对文中的标志折叠手 工 *fold-manual*使用命令来手工定义要折叠的范围。分析文本并发现折叠的脚本也可用这种方法。折叠的级别仅由嵌套次数来定义。要对一定行数的折叠增加级别,可以对相同的行反复定义折叠。当你退出文件编辑时,手工折叠会被遗弃。要保存折叠,使用 |:mkview| 命令。之后要恢复可以使用 |:loadview|。缩 进 *fold-indent*由缩进行自动定义折叠。折叠级别由行的缩进除以 'shiftwidth' (向下取整) 计算而得。连续的,有同样或更高的折叠级别的行,形成一个折叠。在其中,有更高折叠级别的行形成嵌套的折叠。嵌套的级别数受 'foldnestmax' 选项限制。某些行会被忽略并得到上一行或下一行的折叠级别 (取较小值)。符合条件的这样的行要么是空行,要么以 'foldignore' 选项里包含的字符开始。在查找 'foldignore' 里包含的字符时,空白字符会被忽略。对于 C,该选项使用 "#" 来略过要预处理的那些行。当你想用另一种方式来略过行时,使用 'expr' 方法。在 'foldexpr' 中 |indent()| 函数被用来取得一行的缩进。表 达 式 *fold-expr*就象用 "indent" 方式一样,表达式方式的折叠也是由折叠级别自动定义的。对每行,通过计算选项 'foldexpr' 的值来并得到它的折叠级别。如:?所有以制表符开始的连续的几行,创建折叠: >:set foldexpr=getline(v:lnum)[0]=="\t"调用一函数来计算折叠级别: >:set foldexpr=MyFoldLevel(v:lnum)用空白行分开的段落构成折叠: >:set foldexpr=getline(v:lnum)=~'^\s*$'&&getline(v:lnum+1)=~'\S'?'<1':1同上: >:set foldexpr=getline(v:lnum-1)=~'^\s*$'&&getline(v:lnum)=~'\S'?'>1':1备注: ":set" 要特殊处理的字符必须用反斜杠转义。(空格,反斜杠,双引号等等,参考|option-backslash|)这些是表达式的计算条件:- 当前缓冲区和窗口值依所在行而定- 变量 "v:lnum" 被定为该行行号- 计算结果将用以下方式解释:值 代表 ~0 这行不折叠1, 2, .. 这行的折叠级别 1,2 等-1 折叠级别没有定义,使用这行之前或之后一行的级别值,取其中较小的一个。"=" 使用上一行的折叠级别。"a1", "a2", .. 上一行的折叠级别加 1,2,.."s1", "s2", .. 上一行的折叠级别减 1,2,.."<1", "<2", .. 此折叠级别在本行结束">1", ">2", .. 此折叠级别在本行开始不需要用 ">1" ("<1") 标志?叠的开始 (结束)。当这行折叠级别高于 (低于) 上一行的级别时,折叠将开始 (结束)。表达式必须没有副作用。在缓冲区里的文字,光标位置,查找模式,选项等等,不能被改动。如果你非常小心,改动并恢复这些设置还是可以的。表达式中有错误或者计算结果不能识别时,Vim 不会产生错误消息,而是将折叠级别设为0。所以当需要调试时,可将 'debug' 选项设为 "msg",错误消息就可以被见到了。备注: 由于每一行关于表达式的值都要被计算,这一折叠方式可能会很慢!最好避免使用 "=" , "a" 和 "s" 作为返回值,因为 Vim 不得不经常向后回溯以得到折叠级别。这会降低执行速度。|foldlevel()| 计算相对于上一折叠级别的折叠级别。但要注意,如果该级别未知,foidlevel() 返回 -1。它返回的级别对应于该行开始的位置,尽管折叠本身可能在该行结束。折叠可能会没有及时更新。用 |zx| 或者 |zX| 可以强制折叠更新。语 法 *fold-syntax*由带有 "fold" 参数的语法项来定义折叠。|:syn-fold|折叠级别由嵌套的折叠层数来定义。嵌套数由 'foldnestmax' 限定。要小心指定合适的语法同步方式。如果这里有问题,折叠和显示高亮可能会不一致。尤其在使用可能跨越多行的模式时更要小心。如果有疑问,不妨尝试如下的强制同步: >:syn sync fromstart<比 较 *fold-diff*对没有改动的文本或靠近改动的文本自动定义折叠。这个方法仅适用于当前窗口设定 'diff' 选项来显示不同之处时才有效。不然,整个缓冲区就是一个大的折叠。选项 'diffopt' 可以指定上下文。即折叠和不被折叠包括的改变之间相距的行数。比如,设定上下文为 8: >:set diffopt=filler,context:8默认值是 6。当设定了 'scrollbind' 选项时,Vim 会试图在其它比较窗口中打开相同的折叠,这样这些窗口就会显示同一处文本。标 志 *fold-marker*在文本中可以加入标志来指明折叠开始和结束的地方。这可以让你精确的定义折叠。这也让你可以放心地删除和复制折叠而不用担心错误包括了某些行。选项 'foldtext' 通常设置为使折叠行显示折叠标志之前的文本。这样做可以为折叠命名。标志可以包含级别数,也可以使用匹配对。包含级别数较简单,你无须添加结束标志,并可以避免标志不配对的问题。如: >/* global variables {{{1 */int varA, varB;/* functions {{{1 *//* funcA() {{{2 */void funcA() {}/* funcB() {{{2 */void funcB() {}?叠开始于 "{{{" 标志。接下去的数字决定了折叠级别。产生的效果依当前折叠级别和该折叠标志给定的级别的大小关系而定:1. 如果遇到级别相同的标志,上一个折叠结束,另一个有同样级别的折叠开始。2. 如果遇到级别更高的标志,开始一个嵌套的折叠。3. 如果遇到级别更低的标志,所有大于或等于当前级别的折叠结束,且指定级别的折叠开始。数字指定了折叠级别。不能使用 0 (忽略级别为 0 的标志)。你可以使用 "}}}" 带上一个数字来表示这个级别的折叠结束。此行以下的折叠级别将比当前级别小一。备注: Vim不会回溯匹配的标志 (这将耗费太多的时间)。如: >{{{1fold level here is 1{{{3fold level here is 3}}}3fold level here is 2你也可以用一对匹配标志 "{{{" 和 "}}}" 来定义折叠。每个 "{{{" 使折叠级别加 1,"}}}" 使折叠级别减 1。注意一定要使标志匹配!如: >{{{fold level here is 1{{{fold level here is 2}}}fold level here is 1带数字的标志和没有带数字的标志可以混合使用。对于一个大折叠我们可以使用带数字的标志,在函数的内部我们可以使用不带数字的。如对文件中的 "结构定义","局部变量"和 "函数原型" 各个部分,使用级别 1 的折叠。对定义和函数体使用级别 2 的标志。而在函数内部可以使用不带数字的标志。当你在一函数中作更改以分割折叠时,你无须记着标志在哪里。选项 'foldmarker' 可设定所用的标志。建议保留默认值 "{{{,}}}"。这样在 Vim 用户间交换文件时就不会出问题。有时为了要编辑的文件必须改变该选项 (如,文件包含了来自另一个编辑器的折叠标志,或对于当前文件的语法而言,折叠标志会产生歧义等)。*fold-create-marker*"zf" 可通过标志来创建一个折叠。 Vim 将为你插入开始和结束标志。这些标志由'foldmarker' 指定。标志会被添加在行末。如果 'commentstring' 不为空,使用之。以下情况下可能无法正常工作:- 此行已有一个带级别的标志了。Vim 无法判断该如何做。- 在附近的折叠里使用了带级别的标志,使添加无法进行。- 这行包含在一注释中,且 'commentstring' 不为空,且嵌套的注释是非法的。如,在C 的注释中加入 /* {{{ */ ,这将使现有的注释中断。你可以在注释之前或之后添加标志,或手工添加。总的来说,当你已有带级别的标志时,再让 Vim 为你创建标志不是个好主意。*fold-delete-marker*"zd" 可用来删除一个用标志定义的折叠。 Vim 将为你删除标志。Vim 将?折叠的开始和结束处根据 'foldmarker' 查找开始和结束标志。如果标志周围文字和 'commentstring'匹配,这些文字也会被删除。但在以下情况下无法正确执行:- 当一行包含有多于一个的标志且其中一个指定了级别。Vim 不考虑结果是不是真能删除折叠,而仅删除第一个标志。- 当这个标志带有级别且同时被用来开始或结束几个折叠时。==============================================================================2. 折叠命令 *fold-commands* *E490*所有的折叠命令用 "z" 开头。提示: 如果你从侧面看 "z" 象一张叠起来的纸。创 建 和 删 除 折 叠 ~*zf* *E350*zf{motion} 或{Visual}zf 创建折叠操作符。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。用 "manual" 方式,新建的折叠会被关闭。同时 'foldenable' 会被设定。参考 |fold-create-marker|。*zF*zF 对 [count] 行创建折叠。其余同 "zf" 。:{range}fo[ld] *:fold* *:fo*对 {range} 内的行创建折叠。其余同 "zf" 。*zd* *E351*zd 删除 (delete) 在光标下的折叠。当光标在被折叠的行上,该折叠被删除。嵌套的折叠上移一级。在可视模式下所选区域 (部分) 涵盖的折叠都被删除。注意: 这种一次删除多个折叠的简单方法不可撤销。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。参考 |fold-delete-marker|。*zD*zD 循环删除 (Delete) 光标下的折叠。在可视模式下所选区域 (部分) 涵盖的折叠和嵌套的折叠都被删除。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。参考 |fold-delete-marker|。*zE* *E352*zE 除去 (Eliminate) 窗口里所有的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。参考 |fold-delete-marker|。打 开 和 关 闭 折 叠 ~一个小于 'foldminlines' 的折叠的显?就象它被打开时一样。所以,以下的命令对于小折叠所起的作用与描述不同。*zo*zo 打开 (open) 在光标下的折叠。当给定计数时,相应深度的折叠被打开。在可视模式下,所选区域的所有行的折叠被打开一级。*zO*zO 循环打开 (Open) 光标下的折叠。不在光标下的折叠不改变。在可视模式下,打开所有的在选中区域里的折叠,包括被部分选中的。*zc*zc 关闭 (close) 在光标下的折叠。当给定计数时,相应深度的折叠被关闭。在可视模式下,所选区域里的所有行的折叠被关闭一级。'foldenable' 被设定。*zC*zC 循环关闭 (Close) 在光标下的所有折叠。不在光标下的折叠不改变。在可视模式下,关闭所有的在选中区域里的折叠,包括被部分选中的。'foldenable' 被设定。*za*za 当光标位于一关闭的折叠上时,打开之。当折叠嵌套时,你?能需要用"za" 数次。当给定计数时,打开相应数量的被关闭的折叠。当光标位于一打开的折叠上时,关闭之且设定 'foldenable' 。这仅关闭一级折叠,因为再次使用 "za" 将再次打开折叠。当给定计数时,关闭相应数量的折叠 (这不同于重复 "za" 许多次)。*zA*zA 当处在一关闭的折叠上时,循环地打开折叠。当处在一打开的折叠上时,循环地关闭折叠且设定 'foldenable'。*zv*zv 查看 (view) 光标所在的行: 仅打开足够的折叠使光标所在的行不被折叠。*zx*zx 更新折叠: 撤消被手工打开和关闭的折叠: 再次应用 'foldlevel'。然后使用 "zv" : 查看光标所在行。同时强制重新计算折叠。使用 "foldexpr" 并且缓冲区发生改变但折叠不能正确地更新时,这会有用。*zX*zX 手工恢复被打开和关闭的折叠: 再次应用 'foldlevel'。也同时强制重新计算折叠,同 |zx|。*zm*zm 折起更多 (more): 'foldlevel' 减 1。如果 'foldlevel' 已经为 0,则不会被减小。'foldenable' 被设定。*zM*zM 关闭所有折叠: 'foldlevel' 设为 0。'foldenable' 被设定。*zr*zr 减少 (reduce) 折叠: 'foldlevel' 加 1。*zR*zR 打开所有的折叠。'foldlevel' 设为最高级别。*:foldo* *:foldopen*:{range}foldo[pen][!]在 {range} 内打开折叠。当加上 [!] 时,所有的折叠都被打开。对查看在 {range} 内的所有文本很有用。没有 [!] 时,打开一级折叠。*:foldc* *:foldclose*:{range}foldc[lose][!]在 {range} 内关闭折叠。当加上 [!] 时,所有的折叠都被关闭。对隐藏在 {range} 内的所有文本很有用。没有 [!] 时,关闭一级折叠。*zn*zn 不折叠 (none): 复位 'foldenable'。所有的折叠被打开。*zN*zN 正常折叠 (normal): 设定 'foldenable'。所有的折叠都展现它们之前的样子。*zi*zi 翻转 'foldenable' 的值。在 折 叠 间 移 动 ~*[z*[z 到当前打开的折叠的开始。如果已在开始处,移到包含这个折叠的折叠开始处。如果没有包含它的折叠,命令执行失败。当给定计数,重复此命令 [count] 次。*]z*]z 到当前打开的折叠的结束。如果已在结束处,移到包含这个折叠的折叠结束处。如果没有包含它的折叠,命令执行失败。当给定计数,重复此命令 [count] 次。*zj*zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。当给定计数,重复此命令 [count] 次。此命令可在 |operator| 后使用。*zk*zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。当给定计数,重复此命令 [count] 次。此命令可在 |operator| 后使用。对 折 叠 执 行 命 令 ~:[range]foldd[oopen] {cmd} *:foldd* *:folddoopen*对所有不在关闭的折叠中的行执行 {cmd}。给定 [range] 时,仅对范围内那些行起作用。每次命令被执行时,光标会被定位在要被操作的行上。就如 ":global" 命令: 首先标记出所有不在关闭的折叠中的行。然后对所有标记过的行,执行 {cmd}。所以当 {cmd} 改变了文本的折叠时,对命令执行的位置没有影响 (当然,删除行例外)。如: >:folddoopen s/end/loop_end/ge< 使用标志位 "e" 避免了当 "end" 不匹配时得到错误消息。:[range]folddoc[losed] {cmd} *:folddoc* *:folddoclosed*对所有在关闭的折叠里的行,执行 {cmd}。其它同 ":folddoopen" 命令。==============================================================================3. 折叠选项 *fold-options*颜 色 *fold-colors*对关闭的折叠的颜色的设定由 Folded 高亮组 |hl-Folded| 决定。对折叠栏的颜色的设定由 FolderColumn 高?组 |hl-FoldColumn| 决定。下面是设定颜色的例子: >:highlight Folded guibg=grey guifg=blue:highlight FoldColumn guibg=darkgrey guifg=white<折 叠 级 别 *fold-foldlevel*'foldlevel' 是个数值选项: 数字越大则打开的折叠更多。当 'foldlevel' 为 0 时,所有的折叠关闭。当 'foldlevel' 为正数时,一些折叠关闭。当 'foldlevel' 很大时,所有的折叠打开。'foldlevel' 的改变后立即生效。之后,折叠可以被手动地打开和关闭。当其值增大,在新级别 (译者注: 旧级别?) 之上的折叠被打开。手工打开的折叠不会被关闭。当其值减小,在新级别之上的折叠被关闭。手工关闭的折叠不会被打开。折 叠 文 本 *fold-foldtext*'folftext' 是个字符串选项,定义了一个表达式。这个表达式被用来求得关闭折叠所显示的文字。如: >:set foldtext=v:folddashes.substitute(getline(v:foldstart),'/\*\|\*/\|{{{\d\=','','g')显示了折叠的第一行,除去其中的 "/*"、"*/" 和 "{{{" 。备注: 使用反斜杠是为了避免一些字符被 ":set" 命令解释。使用一个函数更简单: >:set foldtext=MyFoldText():function MyFoldText(): let line = getline(v:foldstart): let sub = substitute(line, '/*|*/|{{{d=', '', 'g'): return v:folddashes . sub:endfunction'foldtext' 的计算是在沙盘 |sandbox| 里完成的。其中的当前窗口设为要显示该行的窗口。错误被忽略。默认值是 |foldtext()|。对于大多数类型的折叠它可以返回适合的文字。如果你不喜欢它,你可以自己指定 'foldtext' 表达式。可以使用以下这些 Vim 变量:v:foldstart 折叠首行的行号v:foldend 折叠末行的行号v:folddashes 一个含有连字符的字符串,用来表示折叠级别v:foldlevel 折叠级别在结果中,制表符被替换为空格,而不可显示的字符被替换为可显示的字符。结果行被截短以适合窗口的宽度,永远不会回绕。当在文字后有空余时,用 'fillchars' 来填充。备注: 对那些 ":set" 命令作特殊处理的字符在其前面须加上反斜杠。如: 空格,反斜杠和双引号。 |option-backslash|折 叠 栏 *fold-foldcolumn*'foldcolumn' 是个数字,它设定了在窗口的边上表示折叠的栏的宽度。当为 0 时,没有折叠栏。一个普通值是 4 或 5。最小可用的值是 2,不过 1 仍然可以提供一些信息。最大是 12。一个打开的折叠由一栏来表示,顶端是 '-',其下方是 '|'。这栏在折叠结束的地方结束。当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置。一个关闭的折叠由 '+' 表示。当折叠栏太窄而不能显示所有折叠时,显示一数字来表示嵌套的级别。在折叠栏点击鼠标,可以打开和关闭折叠:- 点击 '+' 打开在这行的关闭折叠- 在任何其他非空字符上点击,关闭这行上的打开折叠其 他 选 项'foldenable' 'fen': 复位时打开所有折叠。'foldexpr' 'fde': 用于 "expr" 折叠的表达式。'foldignore' 'fdi': 用于 "indent" 折叠的字符。'foldmarker' 'fmr': 用于 "marker" 折叠的标志。'foldmethod' 'fdm': 当前折叠方法。'foldminlines' 'fml': 关闭折叠的最小显示行数。'foldnestmax' 'fdn': 用于 "indent" 和 "syntax" 折叠的最大嵌套层数。'foldopen' 'fdo': 哪一种命令可以打开关闭的折叠。'foldclose' 'fcl': 当光标不在折叠上时关闭折叠。==============================================================================4. 折叠行为 *fold-behavior*当上下移动和滚动时,光标将移至连续折叠的行的第一行。当光标已在被折叠的行上时,它移动到下一个没有被折叠的行上,或下一个关闭的折叠。当光标在被折叠的行上时,光标总是显示在第一列。标尺显示确切的标位置。光标本应也在实际位置显示的,但因为被折叠而无法做到。许多移动命令处理连续被折叠的行就象处理空行一样。如,"w" 命令只在首列停一次。在插入模式下,光标所在的行不会被折叠。这让你看得见你键入的内容。当使用操作符时,一个关闭的行被作为整体处理。所以 "dl" 在光标下删除了整个关闭的折叠。对 Ex 命令的执行范围被调整,使得它总是从关闭折叠的第一行开始,在关闭折叠的最后一行结束。所以,命令: >:s/foo/bar/g当光标在关闭的折叠上时,它将在整个折叠里用 "bar" 替换 "foo"。不过 |:folddoopen| 和 |:folddoclosed| 的操作并非如此。编辑一个已经被编辑过的缓冲区时,上次被使用的折叠设置会被再次使用。对手工定义折叠方式,已经被定义的折叠会被恢复。对所有的折叠方式,手工打开和关闭的折叠会被恢复。如果这个缓冲区曾经在这个窗口里被编辑,过去用的值被恢复。否则,来自该缓冲区最近一次编辑的窗口值被使用。==============================================================================统计单词数、行数等 *count-items*如果需要统计缓冲区中一个模式 (pattern) 出现的频率,使用 substitute 命令并加入'n' 标志位以避免实际的替代。Vim 报告的已替代的数目就是模式出现的次数。例: >:%s/./&/gn字符数:%s/i+/&/gn单词数:%s/^//n行数:%s/the/&/gn任何地方出现的 "the":%s/<the>/&/gn作为单词出现的 "the"你可能希望复位 'hlsearch' 或者使用 ":nohlsearch"?如果你希望没有匹配的时候不显示错误,那么增加标志位 'e'。另一种办法就是在可视模式下使用 v_g_CTRL-G。=========================================*08.3* 调整窗口大小:split 命令可以接受计数前缀。如果指定了这个前缀,这个数将作为窗口的高度。例如如下命令可以打开一个三行的窗口并编辑文件 alpha.c:>:3split alpha.c对于已经打开的窗口,你可以用有几种方法改变它的大小。如果你有鼠标,很简单: 把鼠标指针移到分割两个窗口的状态栏上,上下拖动?可。要扩大窗口:>CTRL-W +要缩小窗口:>CTRL-W -这两个命令接受计数前缀用于指定扩大和缩小的行数。所以 "4 CTRL-W +" 会使窗口增高4 行。要把一个窗口设置为指定的高度,可以用这个命令:>{height}CTRL-W _就是先输入一个数值,然后输入 CTRL-W 和一个下划线 (在美式英语键盘中就是 Shift加上 "-")。 要把一个窗口扩展到尽可能大,可以使用无计数前缀的 CTRL-W _ 命令。使 用 鼠 标在 Vim 中,你可以用键盘很快完成很多工作。但很不幸,改变窗口大小要敲不少键。在这种情况下,使用鼠标会更快一些。把鼠标指针移到状态条上,按住左键并拖动。状态条会随之移动,这会使一个窗口更大一个更小。选 项'winheight' 选项设置最小的期望窗口高度而 'winminheight' 选项设置最小的 "硬性"高度。 同样,'winwidth' 设置最小期望宽度而 'winminwidth' 设置最小硬性宽度。 'equalalways' 选项使所有的窗口在关闭或者打开新窗口的时候总保持相同大小转载自:http://www.dabu.info/?p=801
下面四个命令是vi编辑器滚动屏幕的操作ctrl b 往回滚动一个屏幕ctrl f 往前滚动一个屏幕ctrl u 往回滚动半个屏幕ctrl d 往前滚动半个屏幕 我拿一个apache的配置文件的备份文件测试一下:ctrl f ctrl u 再一次ctrl u 应该回到最开启的界面对了。
有以下命令可以查看:# lsb_release -aLSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarchDistributor ID: CentOSDescription: CentOS release 5.4 (Final)Release: 5.4Codename: Final这个命令在centos7以上没有用这个命令适用于所有的linux,包括Redhat、SuSE、Debian、Centos等发行版。root@MyMail ~ # unameLinuxroot@MyMail ~ # uname -r2.6.18-164.el5[root@localhost ~]# uname -aLinux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux以下二种方法适用于RedHat,CentOSroot@MyMail ~ # cat /etc/redhat-releaseCentOS release 5.4 (Final)登录到linux执行rpm -q redhat-release#rpm -q redhat-release或CentOSroot@MyMail ~ # rpm -q centos-releasecentos-release-5-4.el5.centos.1当前centos 版本与redhat对应的版本的命令# cat /proc/versionLinux version 2.6.9-78.ELsmp (mockbuild@builder16.centos.org) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)) #1 SMP Fri Jul 25 00:04:28 EDT 2008
1.DDOS是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。 一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢。 2.应用层DDOS攻击的特征 应用层(七层/HTTP层)DDOS攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点。例如,对于无法处理大量并发请求的系统,仅仅通过建立大量的连接,并周期性的发出少量数据包来保持会话就可以耗尽系统的资源,使其无法接受新的连接请求达到DDOS的目的。其他还有采用发送大量连接请求发送大数据包的请求进行攻击的形式。因为攻击是由木马程序发起,攻击者可以在很短时间内快速建立大量的连接,并发出大量的请求。 以下是一些DDOS的特证,我们可以据此特征来抵抗DDOS(包括但不限于):攻击经常来源于一些相对固定的IP或IP段,每个IP都有远大于真实用户的连接数和请求数。备注:这并不表明这种请求都是代表着DDOS攻击。在很多使用NAT的网络架构中,很多的客户端使用网关的IP地址访问公网资源。但是,即便如此,这样的请求数和连接数也会远少于DDOS攻击。因为攻击是由木马发出且目的是使服务器超负荷,请求的频率会远远超过正常人的请求。User-Agent通常是一个非标准的值Referer有时是一个容易联想到攻击的值 3.使用Nginx、Nginx Plus抵抗DDOS攻击 结合上面提到的DDOS攻击的特征,Nginx、Nginx Plus有很多的特性可以用来有效的防御DDOS攻击,可以从调整入口访问流量和控制反向代理到后端服务器的流量两个方面来达到抵御DDOS攻击的目的。 限制请求速度 设置Nginx的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟30个请求)。 limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;server {...location /login.html {limit_req zone=one;...}} `limit_req_zone`命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端IP($binary_remote_addr)。location块中的`limit_req`通过引用one共享内存区来实现限制访问/login.html的目的。 4.限制连接数量 设置Nginx的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端IP连接/store不可以超过10个。 limit_conn_zone $binary_remote_addr zone=addr:10m;server {...location /store/ {limit_conn addr 10;...}} `limit_conn_zone`命令设置了一个叫addr的共享内存区来存储特定键值的状态,在上面的例子中是客户端IP( $binary_remote_addr)。location块中`limit_conn`通过引用addr共享内存区来限制到/store/的最大连接数为10。 5.关闭慢连接 有一些DDOS攻击,比如Slowlris,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。 `client_body_timeout`命令用来定义读取客户端请求的超时时间,`client_header_timeout`命令用来定于读取客户端请求头的超时时间。这两个参数的默认值都是60s,我们可以通过下面的命令将他们设置为5s: server {client_body_timeout 5s;client_header_timeout 5s;...} 6.设置IP黑名单 如果确定攻击来源于某些IP地址,我们可以将其加入黑名单,Nginx就不会再接受他们的请求。比如,你已经确定攻击来自于从123.123.123.1到123.123.123.16的一段IP地址,你可以这样设置: location / {deny 123.123.123.0/28;...} 或者你确定攻击来源于123.123.123.3、123.123.123.5、123.123.123.7几个IP,可以这样设置: location / {deny 123.123.123.3;deny 123.123.123.5;deny 123.123.123.7;...} 7.设置IP白名单 如果你的网站仅允许特定的IP或IP段访问,你可以结合使用allow和deny命令来限制仅允许你指定的IP地址访问你的网站。如下,你可以设置仅允许192.168.1.0段的内网用户访问: location / {allow 192.168.1.0/24;deny all;...} deny命令会拒绝除了allow指定的IP段之外的所有其他IP的访问请求。
鉴于有些客户在蓝队网络的服务器是托管或者租用的,在使用中发现磁盘不够用,这就要添加挂载新的硬盘。在这里我们以VMware Workstation作为平台做讲解。 当然是先增加硬盘,【右击添加的系统——设置——增加——选择硬盘——一直点击“下一步”】直到完成。 一.单独挂载:挂载之前是需要分区和格式化的哦 1.在终端或者在字符界面中输入:fdisk -l 查看分区情况。这里看到我有一块10G的盘是空闲的。 2.对新增的磁盘进行分区:fdisk /dev/sdb ,在这里为了方便,就把它分为一个盘了。 n add a new partition 注:添加一个分区; p print the partition table 注:p列出分区表; q quit without saving changes 注:不保存退出; w write table to disk and exit 注:把分区表写入硬盘并退出; 说明A:First cylinder (1-1385, default 1):这里是设置分区起始的柱面,直接回车选择默认。 说明B:Last cylinder or +size or +sizeM or +sizeK (1-20805, default 1305):此处是设置分区结束柱面,10G表示从起始柱面开始向后10G结束。 3.在新建扩展分区后,就要建立逻辑分区了。继续输入n新建分区,之后在输入字母l新建逻辑分区(很多人都不知道在新建逻辑分区之前是要先新建扩展分区的,逻辑分区是在扩展分区当中。而逻辑分区是从sdb5开始的,主分区只能分四块也就是从1-4)。 4.分区好后输入w保存退出 5.磁盘划分成功,下面就要对分区进行格式了,字符界面中输入如下如下: mkfs -t ext4 /dev/sdb5 mkfs -t ext4 /dev/sdb6 6.最后还要把格式化后的磁盘挂载到某个目录下: mkdir /mnt/sdb5 mkdir /mnt/sdb6 mount /dev/sdb5 /mnt/sdb5 Mount /dev/sdb6 /mnt/sdb6 7.为了让磁盘能够开机时自动挂载,执行命令:vi /etc/fstab,在文件中添加如下: 8.最后保存退出,系统重启磁盘依然存在。 二.扩容 1.扩容就是把可用的硬盘空间,全部扩充到一个硬盘下,这样的好处就是,硬盘的空间可以利用起来,但坏处就是如果此硬盘分区出问题,就会导致硬盘分区损坏,可能在损坏下的数据就无法恢复了。 2.在扩容之前,我们也要对磁盘进行分区和格式化,具体步骤请参照以上1-4步骤。 3.在扩容之前我们还要把分区格式化成8e(LVM).然后w保存。在这里我们选择刚刚挂载的sdb6分区作为扩容的实验。 4.对sdb6改变格式: fdisk /dev/sdb ——>输入t按回车——>选择分区6——>输入:8e 改变格式 5.查看卷组情况:vgs 6.创建物理卷:pvcreate /dev/sdb6 7.把物理卷加入到卷组:vgextend VolGroup /dev/sdb6 8.查看空间情况 9.查看一下卷组。扩容到lv_root 10.把空闲的空间扩容到lv_root上 11.resize2fs /dev/VolGroup/lv_root 重建文件系统 12.扩容后发现你对应的卷组增大了。
云南蓝队网络做为云南老牌的IDC服务商,从2008年开始,已经立足IDC行业7年有余,在蓝队网络托管的服务器已经达到3000余台,覆盖了云南近70%的服务器托管市场。服务的行业有金融、教育、医药、餐饮、服装、IT、矿业等数十个。 蓝队网络是云南为数不多获得电信增值业务经营许可证的公司 蓝队网络也是云南互联网协会理事单位 通过蓝队网络,可以将服务器托管在昆明电信牛街庄机房,也可以托管在郑州BGP多线机房。除了可以托管1U2U4U服务器外,还可以租用整个机柜。具体价格可以参考:http://www.landui.com/tuoguan/kunming.html,如对服务器托管还有更多疑问,可以咨询在线客服。
服务器(主机)托管(英文:colocation),也称主机代管,指的是客户将自己的互联网服务器放到互联网服务供应商ISP〔互联网服务提供商〕所设立的机房,按时支付必要费用,由ISP代为管理维护,而客户从远端连线服务器进行操作的一种服务方式。客户对设备拥有所有权和配置权,并可要求预留足够的扩展空间。 主机托管摆脱了虚拟主机受软硬件资源的限制,能够提供高性能的处理能力,同时有效降低维护费用和机房设备投入、线路租用等高额费用,非常适合中小企业的服务器需求。
原因:Csrss.exe 进程和某些应用程序 (例如,Microsoft Excel 或 Microsoft Visio) 之间发生的死锁情况下会出现此问题。 解决办法:下载补丁
路由黑洞就是我们平时所说的封IP,是当IP遭受到大流量的ddos攻 击时,手动把这些异常流量引流入NULL0接口(黑洞),命令参考: ip route ipaddress mask null0,意思是如果匹配到所有目的地址是该IP的数据包时,会被丢弃并且不向源发送任何回复,就像黑洞一样使它们有来无回,所以黑洞是解决固定DDOS攻击的最好办法,相当于洪水来临时,在洪水途经的路上附近挖一个不见底的巨大深坑,然后将洪水引入其中。这样就避免了服务器受到影响。 如上文所述,路由黑洞是把目的地址是该IP的所有数据全部丢弃,不会去区分数据包是正常数据或是异常数据,也就意味着做黑洞后服务器的正常数据也被全部丢弃,此时我们就要去衡量得失,如此ddos攻击是否达到服务器的最大负载,是否会对服务器端口造成阻塞,如果远远没有达到服务器最大负载,此时可以在防火墙上做拦截策略对小流量攻击进行拦截。注:监控所做的路由黑洞触发的界限为是否阻塞机柜上连口对其他客户造成影响。 一问一答 监控优化调整线路是怎么做的 优化线路针对的对象是骨干动态路由表未能及时刷新,导致客户服务器通过联通(电信)骨干到达客户本地电信(联通)终端所造成的无法访问或延时过大,此时解决方法为:手动调整客户本地IP段路由出口为电信(联通),参考命令: ip route ipaddress mask ipaddress
服务热线:
4006-75-4006(7*24小时在线)
总机直拨:
0871-63886388(工作日9:00-18:00)
售前咨询
售后咨询
备案咨询
电话
二维码
TOP