https://linux.cn/article-8143-1.html

对一个程序员来说,选择一个文本编辑器是一件非常重要的事。因为不同编辑器之间有着不少的差异:图形界面或者非图形界面、不同的快捷键、不同的编程语言支持、不同的插件以及自定义设置等等。我建议不是去搜索最棒的编辑器,而是去选择最适合你的习惯且最适应你的任务的那一个。假如你打算在一个团体中工作,那么最好和你的共事者选择一样的编辑器。这样的话,一旦你在使用中遇到问题,你就可以去向他们寻求帮助。

这正是我在几年之前开始使用 Vim 的原因。通常来说,Vim 会被置于传说中的 Emacs 的对立面。我承认我对 Emacs 知之甚少,但是对于它俩,你需要知道的是它们都可以被深度定制,并且在初学时也都非常令人困惑。这个教程并不会介绍有关 Vim 的所有内容,而是将介绍一些基础以使你在最初就能正确使用它,随后还会展示一些小技巧,借此(希望能)让你有能力自己去探索学习。

Vim 一词来源于 “Vi IMproved”。Vi 是一个被广泛安装于 Unix 系统的非图形界面文本编辑器,并且它也被默认安装在了 Linux 系统中。Vim 是这个原始编辑器的增强版,但是不同于 Vi,并不是每个发行版都默认安装了它。

安装

在 Ubuntu 中可以使用如下命令来安装 Vim:


  1. sudo apt-get install vim

如果你已经对某些插件有了兴趣,使用以下命令:


  1. sudo apt-cache search vim

这命令将给你输出一个很长的和 Vim 有关的包列表。在这之中,有针对不同编程语言的工具,有插件管理器,等等。

在这系列教程中,我将会在 Ubuntu 上使用最新版的 Vim(7.3.154,LCTT 译注:现在最新版为 8.0)。当然你也可以使用其它任何版本。

热身

在终端输入 vim 命令,你将会看到一个非常棒的欢迎界面。

(LCTT 译注:看到了欢迎界面中那行“Help poor children in Uganda!” 了吗?)

如果你之前从未使用过 Vi 或者 Vim,那么你很可能甚至不知道该怎么退出它... 是的,这是事实。任何你常用的快捷键在 Vim 中都将失去原有的效果。(LCTT 译注:网上有个流传的笑话——“如何制造乱码”,“让新手退出 vi”)

首先,要使用任何命令式的功能,像保存save或者退出exit,你都先得输入一个冒号(:)。保存是 :w 而退出是 :q。如果你想不保存文件就退出,那么就要使用强制退出命令 :q!。Vim 中非常棒的一点是你不需要分开输入各个命令,换言之,如果你想保存然后退出,你就可以直接使用 :wq

现在,我们退出 Vim 再打开一个文本文件。为此,你只需把想要编辑的文件名加在命令后面即可:


  1. vim [文本文件名]

一般而言,当你打开一个文本文件,你将会处在查看模式。这使得 Vim 与众不同并且最初会让人感到困惑。Vim 主要由两种模式构成:查看模式和编辑模式。查看模式用于查看内容并且使用一些命令。想要进入编辑模式,只需按 i 键进行插入insert或者 a 键进行添加add。想要返回到查看模式或者进行命令式功能的操作,按 Escape 键即可。插入insert和添加add的差异仅仅在于你是想在光标位置之前还是在光标之后进入编辑模式并进行文字输入。要想彻底地明白,你应该亲自去尝试一下。我的建议是:仅在行尾使用添加add,而在其它时候使用插入insert。

(LCTT 译注:此段落中“查看模式”原文是 “visual mode”,疑为“view mode”,在此模式下可以查看文本,但是不能进行编辑;而“visual mode” 是编辑模式的一种,可以按 v 键进入,然后就可以用方向键从当前光标位置开始进行选择,并以反白的视觉效果显示,通常选择后可以按 y 进行复制、按 d 进行剪切等操作。此外, 本文作者的用语并不标准,按照 Vim 自己的用语来说,此处所谓的“查看模式”,应该称之为“普通模式”,“编辑模式”应该称之为“插入模式”,不过意思是一致的。)

要想在文本之中移动光标,你通常可以使用键盘上的方向键,它们无论是在查看模式还是在编辑模式都可以生效。不过,一个真正的纯粹主义者将会告诉你使用按键 h 向左,j 向下,k 向上,l 向右来(在查看模式)进行移动。

现在你已经明白了如何和简单地控制 Vim,我们再来更加深入一些。

一些简单命令

现在你已经熟悉了在正常模式和插入模式之间进行切换,下面是一些可以在正常模式中使用的命令:

  • x:删除一个字符
  • u:撤销一个操作(相当与 Ctrl+z
  • dd:删除一行内容
  • dw:删除一个单词
  • yy:复制一行内容
  • yw:复制一个单词
  • p:粘贴一个之前删除或复制的行或者单词
  • e:跳到下个单词(LCTT 译注:词尾)(比单纯用方向键更快)
  • r:替换一个字母(按 r,松开,然后再按新字母)

当然不止这些,不过这些对现在来说已经足够了。如果你掌握了上面的全部,你将能你很顺溜地使用 Vim 了。

对于那些还想知道更多的人,我再多提一下。你可以在任何这些命令之前加上一个数值,那么这个命令将被重复执行相应的次数。例如,5x 将在当前行连续删除 5 个字母,而 3p 将会粘贴 3 次。

高级命令

最后,作为对你自己继续探索的鼓励和示例,这里给出几个高级且常用的命令:

  • /所搜索的内容:在文中搜索特定内容
  • :sp 文本文件名:将屏幕水平分割成上下两半,新文件展示在另一半。想要在两侧切换焦点,可以使用 Ctrl+w 快捷键。
  • :vsp 文本文件名:同上,但是是垂直分割屏幕
  • Ctrl+Shift+C 和 Ctrl+Shift+V:在终端中复制和粘贴文本
  • :! 命令名:在 Vim 中运行 Vim 外的终端命令,直接发送给 shell。例如,:! ls 将在不退出编辑器的同时,显示你当前目录内的文件。 

结论

我觉得你现在应该已经有了足够的准备来开始使用 Vim。你还可以通过安装各种插件,编辑 ~.vimrc文件,或者在 shell 中输入 vimtutor 命令来使用交互式教程以学到更多。

原文发布时间为:2017-01-24

本文来自合作伙伴“Linux中国”

时间: 2024-10-03 06:07:32

https://linux.cn/article-8143-1.html的相关文章

Linux Shell脚本面试25问

Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务. Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,"/bin/bash"是默认登录shell,是在创建用户时分配的.使用chsh命令可以改变默认的shell. 示例如下所示: # chsh <用户名

Linux命令学习总结:ls

命令简介:   ls命令用来列出目标目录(缺省的话为当前目录)中所有的子目录和文件.指令英文原义:list 指令所在路径:/bin/ls 执行权限:All User   命令语法: ls [OPTION]... [FILE]... ls 选项[-alFR...]..... [文件或目录]   命令参数: 此命令参数是Red Hat Enterprise Linux Server release 5.7下ls命令参数,不同版本Linux的ls命令参数有可能不同.以实际版本为准. 参数 长参数 描叙

【Linux学习 】Linux使用Script命令来记录并回放终端会话

[TOC] 一.背景 在之前的博客 [Git学习-->如何通过Shell脚本实现 监控Gitlab备份整个过程并且通过邮件通知得到备份结果?] 里面,我已经详细记录了每天的自动备份与清理过期备份文件的工作. 1.每天凌晨2点在Gitlab服务器上执行Gitlab备份功能. 2.每天凌晨3点在Gitlab服务器上执行scp命令将最新的Gitlab备份文件复制到远程的文件备份服务器. 3.每天凌晨4点在远程的文件备份服务器上检测备份文件的时间,自动删除超过7天的备份文件. 这个脚本从8月18日开始运

linux ip命令和ifconfig命令

From: http://blog.jobbole.com/97270/ From: https://linux.cn/article-3144-1.html From: http://chrinux.blog.51cto.com/6466723/1188108 From: http://www.linuxdiyf.com/linux/23935.html net-tools 和 iproute2 对比         如今很多系统管理员依然通过组合使用诸如ifconfig.route.arp和

Linux监控工具介绍系列&amp;mdash;&amp;mdash;smem

smem工具介绍         smem是Linux系统上的一款可以生成多种内存耗用报告的命令行工具.与现有工具不一样的是smem可以报告实际使用的物理内存(PSS),这是一种更有意义的指标.可以衡量虚拟内存系统的库和应用程序所占用的内存数量. 由于大部分的物理内存通常在多个应用程序之间共享,名为实际使用物理内存(RSS)的这个标准的内存耗用衡量指标会大大高估内存耗用情况.PSS这个参数而是衡量了每个应用程序在每个共享内存区中的"公平分配",给出了一个切合实际的衡量指标.   sme

如何在Linux上检查SSH的版本(转)

SSH协议规范存在一些小版本的差异,但是有两个主要的大版本:SSH1 (版本号 1.XX) 和 SSH2 (版本号 2.00). 事实上,SSH1和SSH2是两个完全不同互不兼容的协议.SSH2明显地提升了SSH1中的很多方面.首先,SSH是宏设计,几个不同的功能(如:认证.传输.连接)被打包进一个单一的协议,SSH2带来了比SSH1更强大的安全特性,如基于MAC的完整性检查,灵活的会话密钥更新.充分协商的加密算法.公钥证书等等. SSH2由IETF标准化,且它的实现在业界被广泛部署和接受.由于

Linux监控工具介绍系列&amp;mdash;&amp;mdash;free

    在Linux系统中,我们查看.监控系统内存使用情况,一般最常用的命令就是free.free命令其实非常简单,参数也非常简单,但是里面很多知识点未必你都掌握了.下面总结一下我所了解的free命令.如有不足,敬请指出.文章很多知识点参考了下面参考资料,都是在这些前辈文章的基础上所做的一个验证和总结. free命令介绍 free命令是一个显示系统中空闲和已用内存大小的工具.大多数Linux发行版都包含有free命令,但是版本可能不一样.free 命令使用/proc/meminfo中的值作为基准

Linux有问必答:Linux上如何查看某个进程的线程

原创:LCTT https://linux.cn/article-5633-1.html 译者: GOLinux本文地址:https://linux.cn/article-5633-1.html2015-6-15 15:44 收藏: 9 问题: 我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率). 线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念.当一个程序内有多个线程被叉分出用以执

如何在 Linux 中统计一个进程的线程数

编译自:http://ask.xmodulo.com/number-of-threads-process-linux.html作者: Dan Nanni原创:LCTT https://linux.cn/article-6240-1.html译者: strugglingyouth本文地址:https://linux.cn/article-6240-1.html 2015-9-17 10:29    收藏: 5             问题: 我正在运行一个程序,它在运行时会派生出多个线程.我想知道