vi 编辑代码技巧

15、Vi/Vim高级编辑技巧与编程代码编辑特性 本文详细介绍了Vi/Vim的高级编辑技巧与编程代码编辑特性,包括宏映射、@函数、ex脚本、缩进控制、程序过程搜索以及ctags的应用。通过这些功能,可以显著提高文本编辑和代码编写的效率,并增强文档和代码的一致性与可维护性。适用于技术作者、程序员及需要高效编辑工具的用户。 阅读详情
    相信大部分在linux下使用Vi的朋友和我一样,主要都是用vi来编辑程序源代码。而事实上Vi也提供了针对这方面的重要功能,主要包括有:缩进控制、符号匹配(如'{'和'}' )以及使用ctags。

     1、缩进控制
     (1)使用自动缩进功能
          :set autoindent 或 :set ai
     (2)当已经使用了自动缩进功能后,在插入模式下(注意不是命令模式下)
          Ctrl+t 对行实现另一级别的缩进
          Ctrl+d 取消一个级别的缩进
     (3)在命令模式下
          << 将行向左移动8个空格
          >> 将行向右移动8个空格
          n<< 或 n>> 将连续n行向左或向右缩进8个空格
          如当程序代码中有连续5行没有缩进,要进行缩进更正,使用5>>就可以实现这5行均缩进。

    2、特殊的搜索匹配命令
    针对开括号字符(、[、{和< 或闭括号字符)、]、}和>
    (1)当光标位于上述字符中的任何一个时,命令模式下按下%,光标将移动到与之匹配的开括号或闭括号处,若没有移动到相应的符号处,则肯定是程序中有输入有错误。
    (2)另一发现匹配括号的设置选项如下
       :set showmatch 或 :set sm
       设置好后,当我们输入)或}时,光标在返回当前位置之前将短暂地移回到相匹配的(或{处,若不存在相匹配的括号字符,终端则会发出嘟嘟的声音。

    3、使用ctags标志
    Windows下有source insight工具阅读程序代码功能十分强大,使用也相当方便,尤其是针对像阅读多文件源程序时如linux内核源码等;但在linux下呢,在网上听说过有source navigator这一工具和Vi+Ctags,不过前者配置似乎比较麻烦,自己更不曾使用过,而后者也是最近开始使用,发现这类轻量级武还是甚为好用的,让人不得不折服于unix所推崇的利用多个实用工具软件组合完成任务的哲学,vi+ ctags便是很好的证明。
    在vi内部使用
    :!ctags file.c 该命令将在当前目录下创建一个tags名称文件,文件中包括了file.c文件中定义的函数信息。
    :!ctags *.c    创建当前目录下所有C源文件的tags文件
    :tag name      可以定位到name函数定义处   
    当然,要熟悉使用vi+ctags,还远不止以上用法,关键还在于多用,呵呵 :p

    4、编写Vim配置文件.vimrc
    上述提到的各种Vi设置命令在我们每次进入vi后必须重新设置才能生效,如果希望每次进入vi后自动进行设置而不用显式命令设置,就需编写vi配置文件。
    vi --version // 可以查看其配置文件所在目录,通常在主目录下如/home/username/.vimrc
    如果主目录下不存在该文件,则在主目录下创建.vimrc文件,在其中添加相设置的命令,针对C源程序一般其内容可以设置如下:(呵呵,强烈推荐使用vim配置文件 :p)
 :set cindent
 :set shiftwidth=4
 :set ts=4

 

 

[转]Vim 复制粘贴探秘

Vim作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的事情。每当学会了vim的一个新功能,就会很大地提高工作效率。有人使用vim几十年,还没有完全掌握vim的功能,这也说明了vim的强大。而这样何尝不是一件好事呢,只要有的学习,就有的提高。

最近使用Vim来写博客,发现在Vim中粘贴Python代码后,缩进就全乱了。仔细研究了以下,原来是自动缩进的缘故,于是做如下设置: 

:set noai nosi

取消了自动缩进和智能缩进,这样粘贴就不会错行了。但在有的vim中不行,还是排版错乱。

后来发现了更好用的设置:

:set paste

进入paste模式以后,可以在插入模式下粘贴内容,不会有任何变形。这个真是灰常好用,情不自禁看了一下帮助,发现它做了这么多事:

  • textwidth设置为0
  • wrapmargin设置为0
  • set noai
  • set nosi
  • softtabstop设置为0
  • revins重置
  • ruler重置
  • showmatch重置
  • formatoptions使用空值

下面的选项值不变,但却被禁用:

  • lisp
  • indentexpr
  • cindent

怪不得之前只设置noai和nosi不行,原来与这么多因素有关!

但这样还是比较麻烦的,每次要粘贴的话,先set paste,然后粘贴,然后再set nopaste。有没有更方便的呢?你可能想到了,使用键盘映射呀,对。我们可以这样设置::

:map <F10> :set paste<CR>
:map <F11> :set nopaste<CR>

这样在粘贴前按F10键启动paste模式,粘贴后按F11取消paste模式即可。其实,paste有一个切换paste开关的选项,这就是pastetoggle。通过它可以绑定快捷键来激活/取消 paste模式。比如::

:set pastetoggle=<F11>

这样减少了一个快捷键的占用,使用起来也更方便一些。

但,这是最方便的吗?Vimer们对高效的追求永无止境。还有其他更好地方法吗?

你可能想到了,vim寄存器。对,使用vim寄存器 “+p 粘贴即可。根本不用考虑是否自动缩进,是否paste模式,直接原文传递!:

"+p

要说vim寄存器,就要从vim文件间的复制粘贴说起。

Vim中,若要复制当前行,普通模式下按 yy 即可,在要粘贴的地方按 p 。这是vim将复制内容保存到了自己的寄存器中的缘故。如果在其他地方执行yy,新的内容将覆盖掉原寄存器中内容。如果想保存原寄存器中内容而同时增加新的内容呢?这时就要在yy前增加标签了。标签以双引号开始,跟着的是标签名称,可以是数字0-9,也可以是26个字母,然后就是复制操作,这样就把复制内容保存到该标签寄存器里。通过下面命令显示所有寄存器内容::

:reg

其中注意两个特殊的寄存器:”* 和 “+。这两个寄存器是和系统相通的,前者关联系统选择缓冲区,后者关联系统剪切板。通过它们可以和其他程序进行数据交换。

备注:

若寄存器列表里无”* 或 “+ 寄存器,则可能是由于没有安装vim的图形界面所致。Debian/Ubuntu下可以通过安装vim-gnome解决。

$ sudo apt-get install vim-gnome

选择缓冲区和系统剪切板啥子区别?让我们继续研究。

选择缓冲区和剪切板

不同于Windows,Linux系统里存在两个剪切板:一个叫做选择缓冲区(X11 selection buffer),另一个才是剪切板(clipboard)。

选择缓冲区是实时的,当使用鼠标或键盘选择内容时,内容已经存在于选择缓冲区了,这或许就是选择缓冲区的由来吧。

使用下面的命令查看选择缓冲区的内容::

$ xclip -out

如果没有xclip命令,Debian/Ubuntu下可以通过如下命令安装::

$ sudo apt-get install xclip

可以使用鼠标中键或键入Shift+Insert来粘贴选择缓冲区的内容。但对于有些GUI程序,比如gedit,只能通过鼠标中键调用选择缓冲区的内容,使用Shift+Insert的话,调用的是剪切板的内容。

剪切板和Windows的剪切板类似,在选择文字内容后,执行Ctrl + c或在菜单里选择‘复制’的话,这时内容才存放到剪切板里。

使用下面的命令查看剪切板的内容::

$ xclip -out -sel clipboard

而使用剪切板的内容,则是Ctrl+v。 但在有些情况下,比如gnome-terminal,不能直接使用Ctrl+c,Ctrl+v,这时就要用Shift+Ctrl+c,Shift+Ctrl+v代替。

原格式粘贴

好了,了解了选择缓冲区和剪切板,下面就是实现保留格式粘贴的完美解决方案:

  • 方案一:
  1. 选择文本内容
  2. vim普通模式下按 “*p 将选择缓冲区中内容粘贴进来
  • 方案二:
  1. 复制文件内容
  2. vim普通模式下按 “+ p 将剪切板内容粘贴进来

这时,如果要复制的内容也是vim编辑器中的内容,那么如何复制才更方便呢?

vim中的复制

vim有一个可视模式(Visual Mode),在此模式下可以选择区域。可以在普通模式下键入v进入可视模式,也可以个性化一点,键入V进入行可视模式,或者键入Ctrl+v进入列可视模式。这时移动光标就可以选择内容了。注意这时被选内容已经实时保存于选择缓冲区了,当然你也可以键入”+y将此内容也保存到剪切板里,或者”ay将内容保存到标签为a的寄存器中。但要知道,只有前两个中的内容可以在其他程序中使用,而a寄存器中的内容只能在该vim编辑器内使用。

也可以通过鼠标来复制。这里首先要打开鼠标模式。:

:set mouse=a

这样在普通模式下可以直接使用鼠标选择区域复制到选择缓冲区。但这种情况下不能复制到剪切板。

若要使用鼠标复制内容到剪切板,则需要做如下设置::

:set mouse=v

这种情况下,除了可以像上面一样直接使用鼠标选择区域复制到选择缓冲区以外,还可以在右键菜单中选择“复制”来保存到剪切板里。但新问题又出来了。若显示行号,也会将行号一并选择。你会想到,这好办呀,如果不需要行号的话,在复制前,先执行set nonu来取消行号显示呗。

其实没必要这样,如果不需要复制行号的话,用在可视模式下用键盘来选择不就可以吗?

并且,从上面的讨论,我们不难得出,使用选择缓冲区比使用剪切板要方便的多,可以节省很多步骤。

所以,最终我们得到了vim文件间复制粘贴的完美方案,文件传输的中转使用选择缓冲区。

vim文件间复制粘贴完美方案

  1. 在~/.vimrc中增加如下一行::

    set mouse=v
  2. 复制内容到选择缓冲区。

    • 带行号时,使用鼠标选择内容区域。
    • 不要行号,使用 “*yny 复制n行或可视模式下选择。
  3. 将选择缓冲区中内容粘贴到vim文件:普通模式下按 “*p 。


补充:

设置vim中默认使用选择缓冲区寄存器 “*:

set clipboard = unnamed

则可以直接通过y,p和系统选择缓冲区进行数据交换。

(原文地址: http://blog.ossxp.com/2010/12/2190/)

 


 

OPC UA 服务端的模拟工具及客户端工具 详细介绍如何使用 Prosys OPC UA Simulation Server 作为 OPC UA 服务端的模拟工具来生成数据模型,并使用 Softing OPC UA Client 作为客户端工具,直观地查看和验证模拟生成的数据。 阅读详情

相关推荐

ADI DSP开发环境(CCES)下的程序烧录问题(以ADSP-SC589为例)

在CCES环境下将程序烧录到flash主要有两种方式。首先在对项目编译产生文件的属性设置为Release。 在编译完成后,找到每个CORE单独生成的DXE文件: 文件通常位于项目目录下每个core的Release文件中。安装SC589评估板的驱动(ADSP-SC5xx_EZ-KIT_Lite-Rel2.0.0.exe)后,在安装目录下可以找到SPI FLASH芯片的驱动程序(sc589_w25q128fv_dpia_Core1.dxe): 把文件copy到CCES 的目录下由于SC58x处理器的特殊性

daijingxin的博客 3730

Linux 实操篇- Vi 和 Vim 编辑器

Linux实操篇 vi 和 vim 编辑器的使用

要学就学灰太狼的博客 1478

STC51单片机串口多字节数据接收的优化策略

本文深入探讨了STC51单片机串口多字节数据接收的优化策略。针对数据丢包、粘包等常见痛点,核心思路是采用“缓冲队列+定时器超时”模式,将实时处理转变为“先收纳,后处理”。文章详细讲解了硬件初始化、中断服务程序优化(快速入队与激活超时裁判)以及主循环的非阻塞设计,并进阶介绍了环形缓冲区实现与错误处理,旨在构建稳定可靠的串口通信系统。

weixin_29264201的博客 374

文本编辑神器vi

vi介绍 vi是一种工作在Linux上的文本编辑器,全称是Visual Interface。它在字符模式下工作,不需要图形界面。它有三种基本的工作模式: 命令模式(Command mode) 输入模式(Insert mode) 底线命令模式(Last line mode) 命令模式 用户再启动vi后,直接进入了命令模式。在此模式下可以输入各种命令。以下是几种常用的命令: i 切换到输入模式,以输入字符 x 删除当前光标所在处的字符 : 切换到底线命

qq_54809548的博客 2549

PCIE Lane Margining Linux 环境配置

Copy all the provided files in folder PYC38 or PYC310 to the created pcie_lmt folder. Index of /ftp/python/3.8.10/Copy below commands to a file and rename it as "scan_pcie.py", the commands are from "685662 PCIe-LMT-Gen4_Gen5-r0p77.pdf" in the lane margi

mysongshine的博客 1439

C#操作SQLite数据库帮助类——SQLiteHelper

using System; using System.Collections.Generic; using System.Data.SQLite; using System.Data; namespace Com.ZCWL.Rock.Helper { public class SQLiteHelper { private static string connectionString =

跟健哥出去走走 2万+

【Vi 编辑器初步】

熟练的在 Linux 命令行下使用 Vi 编辑器编辑文本文件,尤其是其中的快捷操作。

qq_53076698的博客 2897

Proteus仿真——电压比较器

电压比较器是一种对输入信号进行鉴别与比较的电路,是组成非正弦波发生电路的基本单元电路。常用电压比较器有如下几种:单限比较器、滞回比较器、窗口比较器、集成电压比较器等。

weixin_58745307的博客 3377

使用Vi编辑器编写Linux0.11程序并编译运行

一.vi编辑器的使用 Linux自带的一个文本编辑器。 vi编辑器有3种操作模式:命令模式、插入模式和末行模式。 命令模式:当输入vi命令后,会首先进入命令模式,此时输入的任何字符都被视为命令。命令模式用于控制屏幕光标移动、文本字符/字/行删除、移动复制某区段,以及进入插入模式或进入末行模式。 插入模式:在命令模式输入相应的插入命令(例如i命令)进入该模式。只有在插入模式下,才可以进行文字数据输入及添加代码,按Esc键可回到命令模式。 末行模式:在命令模式下输入某些特殊字符,如“/”、“?”和“:

qq_53162179的博客 5914

Open3D (C++) KD tree的使用【2025最新版】

Open3D (C++) KD tree的使用,博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 1566

IP-Guard安全网关实例

企业相关情况: 1.OA系统,主要为日常工作使用,该系统IP为192.168.1.2,端口为8080; 2.文件共享服务器,用于存放日常工作资料和文档,该文件共享服务器的IP为192.168.1.1,其中\\192.168.1.1\private 目录中的存放着公司重要文档,不能随意外传; 3.安全网关已采用串联的方式联入网络,IP为192.168.2.6,所有机器访问OA系统和文件共享服务...

IP-Guard专栏 707

Linux 之vi编辑器(一)

vi编辑器的使用(一)

qq_48297937的博客 4267

uniapp - 超详细的 H5 公众号网页微信登录示例代码,提供从 0-1 公众号配置及详细注释代码(站在新手小白的角度)第三方微信授权登录的实现!!

uniapp微信浏览器H5授权微信登录,UniApp开发H5接入微信登录的全过程,uniapp的H5页面使用微信登录,uniapp H5微信授权登录,H5之微信授权登陆 (uniapp网页版微信授权登录),uni-app开发H5第三方微信授权登录的实现,uniapp如何实现微信授权登录,公众号H5页面接入微信登录流程,uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级

✅ 精选推荐文章 1万+

一些常用代码编辑器(Vi、gedit、EditPlus、SourceInsight)的使用技巧小结

 一些常用代码编辑工具的使用技巧小结 本文由优快云-蚍蜉撼青松【主页:http://blog.youkuaiyun.com/howeverpf】整理原创,转载请注明出处!    一、使用Vi编辑多文档 “VI编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,使它成了效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,但VI在系统和服务器管理中的...

平凡之路 5761

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

转载:vi/vimvim技巧

vi/vim虐我千百遍,我待vi/vim如初恋 ...

一千世界 2774

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

vi编辑器

一 打开文件:    与第0步不同,这里介绍最近在用vi看代码需要的一些命令,用了不少时间来bing到,记下来以后省得四处找     vi filename     会打开文件,并停留在上次编辑的位置      提高效率:        修改代码时通常都会记得自己要修改的行数和修改字段的特征:)毕竟是出问题的代码或者经过考虑find到的,因此定位文件打开的位置可

aqi2014的专栏 350

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

vi使用技巧

一、批量添加、删除注释 使用vi批量加注释“#”,看似简单但用处很大。 1、ctrl+v使用方向键上下选择范围; 2、shift+i进入编辑模式,添加“#”。随后按esc退出(也可理解为运行批量添加);此时批注已加好 3、删批注:ctrl+v使用方向键上下选择去除批注的范围,按“x”; 二、显示行号 进入末行模式,输入set number回车 三、快速定位到某行...

weixin_33941350的博客 92

怎样用vi编程zz

用了近2年的emacs,没想到进了公司基本就没有机会摸了。。全都是裸环境,一次两次还好。。 转投vi的阵营也不只是单纯的环境原因吧,感觉vi的操作更快一些,坚持用一些命令时间长了会很大的提高效率。  3.27 更新新学的几个地方,ctags还在摸索中·0· 零  浏览代码       拿到开源代码或者类似遗留代码的时候,阅读是必不可少的工作,通常我喜欢先整体的浏览下代码,长度,格式,是否符合个人...

weixin_33681778的博客 177

vi,vim文本编辑器

vi,vim介绍 Vi是所有Unix和linux系统下标准的编辑器,类似于Windows系统下的notepad(记事本)编辑器,由于在Unix和linux系统下的任何版本,vi编辑器是完全相同的,因此可以在其他任何介绍vi 的地方都能进一步了解它,vi也是linux中最基本的文本编辑器,学会它后,可以linux的世界畅通无阻,尤其是在终端中。 Vi和vim都是linux系统中的编辑器,不同的是...

L00918的博客 2万+

小白怎么在Linux系统中利用vi编辑器运行java代码

最近学习了Linux系统,免不了去学习各种指令,其中vi指令可以说是一个很强大又很常用的一个命令了,现在我就尝试着在Linux系统中vi编辑器去编写java代码,后面也会涉及一些java底层的一些机制 VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令之一了,但是因为其命令太多,导致很多人都不太习惯去使用它,但是当你去慢慢熟悉它之后,掌握一些基本技巧,会发现它会给你带来效率上的巨大...

qq_42705521的博客 1289

我使用过的Linux命令之vi - 广泛使用的文本编辑器

我使用过的Linux命令之vi - 广泛使用的文本编辑器 本文链接:http://codingstandards.iteye.com/blog/966982   (转载请注明出处) 用途说明     vi是Linux/Unix中最常用的文本编辑器,它是全屏幕的编辑器,类似DOS/Windows下的edit程序,但它的使用方式与edit很不一 样。vi是“Visual In...

巨人站在肩膀上 507

VI高级技巧

楼主del77(蓝色阳光-)2003-04-29 18:36:05 在 Linux/Unix社区 / 程序开发区 提问我先说几个     标记文本         mchar     用字母char标记当前光标的位置         `char     移至char所标记处         char     移至char标记所在行的开头处         "       移至当前行上一次所在

ChipArtist's Blogs 3756

Vi与Vim编辑器

1. 什么是 Vi 和 Vim?Vi是 Unix/Linux 系统中经典的命令行文本编辑器,设计简洁,几乎所有 Linux 发行版都预装。特点:轻量级、模式化编辑(命令模式、插入模式)、适合快速编辑配置文件或代码。Vim是 Vi 的增强版本,在 Vi 的基础上添加了语法高亮、插件支持、多级撤销等现代功能。特点:功能丰富、可扩展性强,适合开发者或需要高效编辑的场景。2. Vi 和 Vim 的核心区别特性ViVim语法高亮不支持支持(根据文件类型自动着色)多级撤销仅支持单次撤销(按。

Bad_Things的博客 1422

vi/vim 终端中的编辑器简单使用

vi/vim 终端中的编辑器 在终端中输入 vi 在后面跟上文件名 即可 $ vi 文件名 +行数 提示:如果只带上 + 而不指定行号,会直接定位到文件末尾 提示: 在Touch Bar 的mac电脑上,按 ESC不方便。可以使用 CTRL+【 替换 末行模式的命令 命令 英文 功能 w write 保存 q quit 退出,如果没有保存,不允许退出 q...

qq_44891434的博客 1018

一些常用代码编辑工具的使用技巧小结

一些常用代码编辑工具的使用技巧小结    一、使用Vi编辑多文档 “VI编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,使它成了效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,但VI在系统和服务器管理中的能是那些图形编辑器所无法比拟的。”---百度百科 1.1 在启动Vi的时候就指定打开多个文件        

nyist327的专栏 1326

第三课:vi编辑器与C语言

vi编辑器:1、vi编辑器有三种模式:底行模式,命令模式,插入模式        命令模式:            1、从命令模式切换到插入模式:                I/i:光标移动到当前行的最左端/在光标左端输入                A/a:光标移动到当前行的最右端/在光标右端输入                O/o:光标移动到上一行(另起一行)/光标移动到下一行(另起一...

huangxukun的博客 757
上一篇: 子makefile怎么向总控makefile传递变量
下一篇: vi实用技巧
hushup
博客等级 码龄16年 100粉丝 15原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值