标签 Vim 下的文章

Vim 是我最喜爱的编辑器。对于那些默认使用其他编辑器的程序,我对系统所做的这些改变可以使得 Vim 成为它们默认编辑器。

 title=

我使用 Linux 大概有 25 年了,在那之前我还使用了几年的 Unix。在这段时间里,我对一些日常使用的工具形成了偏好。Vim 是我使用的最重要的工具之一。

我在 90 年代初学习 Solaris 时,就开始使用 Vi 了,因为有人告诉我,它在任何系统上都能使用。从我的经验来看,确实是这样。我也试过其他编辑器,它们都能够胜任工作。但是,对于我来说,Vim 的使用效果最好。我经常使用它,以至于形成了肌肉记忆,甚至我在使用其他编辑器时也会下意识地去按 Vim 的快捷键。

另外,我只是单纯地喜欢 Vim 而已。

许多配置文件使用的名字是 Vi 而不是 Vim,你可以运行 vi 命令。不过,vi 命令其实是 vim 命令的一个链接。

许多 Linux 工具使用的编辑器都是在模拟或是直接调用的 NanoEmacs 或者 Vim。其他的一些工具允许用户(比如那些有着明确偏好的用户)使用他们喜欢的编辑器。举两个对我影响最大的例子,一个是 Bash 命令行,它默认使用 Emacs;另一个是 Alpine 文本模式的邮件客户端,它默认使用 Pico。事实上,Pico 是专门为 Pine 邮件客户端编写的,而 Pine 是 Alpine 的前身。

并非所有使用外部编辑器的程序都是可配置的。有些程序只使用开发者指定的编辑器。对于那些可配置的应用程序,有不同的方法来选择你喜欢的编辑器。

在 Linux 命令行中编辑

除了实际编辑文本文件外,另一个我经常使用,且和编辑密切相关的工具是 Bash shell。Bash 的默认编辑器是 Emacs。虽然我也用过 Emacs,但我肯定更喜欢 Vim。所以很多年前,我把 Bash 命令行的默认编辑器从 Emacs 换成了 Vim,这对我来说更舒服。

有很多种方法可以配置 Bash。你可以使用一个本地配置文件,比如 /home/yourhomedirectory/.bashrc,它只对你的用户账户进行默认修改,而不对同一系统的其他用户进行修改。我个人倾向于让这些改变成为全局性的,基本上就是我的个人账户和 root。如果你也想全局配置,你可以创建你自己的配置文件,并把它放在 /etc/profile.d 目录中。

我在 /etc/profile.d 中添加了一个名为 myBashConfig.sh 的文件。/etc/profile.d 目录中存放了所有已安装的 shell 的启动文件。在启动终端会话时,每个 shell 仅会根据文件名的扩展名,读取为其准备的启动文件。例如,Bash shell 只读取扩展名为 .sh 的文件。

<截断>
alias vim='vim -c "colorscheme desert" '
# 把 vi 设置为 Bash 的默认编辑器
set -o vi
# 为所有检查 $EDITOR 变量的程序设置默认编辑器为 vi
EDITOR=vi
<截断>

在这个全局 Bash 配置文件段中,set -o vi 将 Vi 设置为默认编辑器。这个 set 命令中的 -o 选项将 vi 定义为编辑器。为使配置生效,你需要关闭所有正在运行的 Bash 会话,并打开新的会话。

现在,你现在可以使用所有你熟悉的 Vim 命令,包括光标移动。只要按下 Esc 键就可以进入 Vim 编辑模式。我特别喜欢多次使用 b 将光标移回多个字的功能。

将 Vim 设置为其他程序的默认值

一些 Linux 命令行工具和程序会检查 $EDITOR 环境变量来决定使用哪个编辑器。你可以用下面的命令检查这个变量的当前值。我在一个新安装的虚拟机上运行过该命令,以查看默认的编辑器到底是什么。

# echo $EDITOR
/usr/bin/nano
#

默认情况下,检查 $EDITOR 环境变量的 Fedora 程序会使用 Nano 编辑器。在 myBashConfig.sh 中添加一行 EDITOR=vi(如上面的片段所示),可以将默认值改为 Vi(Vim)编辑器。然而,不是所有使用外部编辑器的命令行程序都会检查这个环境变量。

在 Alpine 中编辑电子邮件

几周前,我认为 Pico 不太适合作为我的电子邮件编辑器。我可以使用它,而且在从 Thunderbird 转到 Alpine 之后的一段时间内我也用了一段时间。但我发现,Pico 妨碍了我,我总是习惯使用 Vim 按键序列,这影响了我的工作效率。

我在 Alpine 的用户帮助中看到,默认编辑器是可以修改的。我决定把它改成 Vim。实际上这很容易做到。

在 Alpine 主菜单上,按 S 键进入设置,然后按 C 键进行配置。在 “ 编辑器设置 Composer Preferences ” 部分,按 X 选择 “ 启用外部编辑器命令 Enable Alternate Editor Command ” 和 “ 隐式启用外部编辑器 Enable Alternate Editor Implicitly ” 项目。在往下滚动几页的 “ 高级用户设置 Advanced User Preferences ” 部分,找到 `Editor 那一行。如果它还没有被修改的话,它应该是这样的:

Editor    = <No Value Set>

用光标栏突出显示 Editor 这一行,然后按回车键来编辑。将 <No Value Set> 改为 vim,再按回车键,然后按 E 键退出,最后按 Y 键保存修改。

要用 Vim 编辑电子邮件,只需进入电子邮件正文,Vim 就会自动启动,就像 Pico 那样。所有我喜欢的编辑功能都还在,因为它实际上是在使用 Vim。甚至退出 Vim 的 Esc :wq 序列也是一样的。

总结

与其他编辑器相比,我更喜欢 Vim,对我的系统进行的这些改动后,那些默认使用其他编辑器的应用程序,将使用 Vim 来替代它们的默认编辑器。有些程序使用 $EDITOR 环境变量,因此你只需要做一次修改就够了。其他有用户配置选项的程序,如 Alpine,则必须为每个程序单独设置。

这种可以选择你喜欢的外部编辑器的能力,非常符合 Unix 哲学的宗旨:“每个程序都只做一件事,而且要做得出色”。既然已经有几个优秀的编辑器,为什么还要再写一个呢?而且它也符合 Linux 哲学的宗旨:“使用你最喜欢的编辑器”。

当然,你可以把你的默认文本编辑器改为 Nano、Pico、Emacs 或任何其他你喜欢的编辑器。


via: https://opensource.com/article/22/2/configure-vim-default-editor

作者:David Both 选题:lujun9972 译者:lkxed 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我们需要利用文本编辑器来做笔记、写程序,或者编辑系统配置文件来完成一些事情。

不管你用来做什么,你的 Linux 发行版已经预装了文本编辑器。

你很可能会注意到一些 最好的现代文本编辑器,如 Gedit、Geany、Kate 等,它们已经预装在你的 Linux 发行版中。然而,这些都是基于 GUI 的程序。

如果你想通过终端访问文本编辑器怎么办?你应该发现它也内置在你的 Linux 发行版中了。

Vim 和 nano 是最流行的 CLI 文本编辑器 之二。

但是,是什么让它们如此受欢迎?你应该选择哪个作为你的文本编辑器?让我指出一下 Vim 和 nano 的区别,以帮助你决定。

1、基于终端的编辑器介绍

nano 和 Vim 都提供了大部分的基本功能。虽然 nano 在大多数 Linux 发行版上是内置的,但你必须手动安装 Vim。

为了比较这两者,让我给你简单介绍一下这两者。

Vim

Vim 是 “Vi” 文本编辑器的改进版,开发于 1991 年。Vim 是 “ Vi 改进版 Vi IMproved ” 的意思。

Vi 是一个基于终端的文本编辑器,最初于 1976 年为 Unix 操作系统而开发。Vim 是它的一个具有现代功能的增强版。

考虑到它的各种功能可以帮助编辑程序文件,它也被称为“程序员的文本编辑器”。虽然它提供了一些高级功能,但你也可以用来编辑纯文本文件。

GNU nano

GNU nano(我们在文章中称它为 “nano”)是一个简单的基于终端的文本编辑器,其灵感来自于 Pico —— 这个基于 Unix 的文本编辑器是华盛顿大学 1989 年开发的 Pine 电子邮件套件的一部分。

Pico 文本编辑器没有 GPL(许可证),这使得它很难被纳入 Linux 发行版。

因此,nano 被开发出来作为它的自由软件替代品。nano 编辑器最初被称为 “tip”,然后在 Richard Stallman 宣布它成为正式的 GNU 程序之前重新命名为 nano。

这个编辑器的亮点是它的易用性和极小的学习曲线。你不一定需要成为程序员才能使用 nano。

2、功能差异

下面是 Vim 和 nano 的主要功能差异:

Vim 的主要特点

  • 多级撤销
  • 语法高亮
  • 命令行编辑
  • 文件名补完
  • 多窗口和缓冲区
  • 折叠
  • 会话
  • 支持宏

nano 的主要特点

  • 打开多个文件
  • 逐行滚动
  • 撤销/重做
  • 语法着色
  • 行号

请注意,一般来说,Vim 提供了更高级的功能。然而,它们都提供了编辑系统配置文件、编程和文本编辑等基本功能。

3、用作文本编辑器

在 Vim 或 nano 中打开一个文件很简单,只要输入你想使用的编辑器的名字,然后再输入文件的路径。路径可以是文件的绝对路径,也可以是文件的相对路径。

vim Documents/text.txt
nano Documents/text.txt

但是,除了用作文本编辑器访问或打开一个文件之外,还有很多功能,对吗?

如果你想快速比较一下,这里有一些基于我的使用情况的比较点:

Vim:

  • 模式驱动的编辑器
  • 在开始时有巨大的学习曲线
  • 会话恢复
  • 语法高亮/着色
  • 提供高级功能

nano:

  • 易于使用(经常使用的功能及其组合键列在底部)
  • 不存在学习曲线
  • 旨在进行快速编辑

nano 和 Vim 的主要区别在于,它们的目标受众非常不同。

Vim

Vim 是一个模式驱动的编辑器。这意味着字母、数字和标点符号键在按下时都要做一件独特的事情,而不是在屏幕上打出一个字符。

这些模式包括:

  • 正常模式
  • 视觉模式
  • 插入模式
  • 命令行命令
  • 命令行编辑

默认情况下,当你启动 Vim 时,它以 正常 模式打开。每个键都有其独特的功能,不会立即开始输入所按下的字符。

不管什么模式,如果你愿意,你也可以 把 Vim 配置成一个写作工具

要知道更多关于这些有趣的事情,你可以参考我们关于 基本 Vim 命令 以及 Vim 技巧和窍门 的文章。

当你启动 Vim(无参数)时的终端屏幕

在正常模式下,按特定的键会移动你的光标。

例如,如果你按下 l(小写字母 L),它将把光标向右移动一个字符,按 h 键将把光标向左移动一个字符。

如果你想把光标向下移动一行,你就按 j 键,如果要把光标向上移动一行,你应该按 k 键。

在正常模式下 lkjh 是导航键。虽然你可以用方向键来移动,但这样做更有效率。

这些是 Vim 中的基本导航键。

接下来最常用的键是 wbe

  • w 键可将光标移到下一个词。如果它已经在一个词的开头,它就会移动到下一个词的开头。
  • b 键,光标会移到左边的词的开头。
  • e 键,则将光标移到右边的词的末尾。

你甚至可以用这些键混合数字(作为前缀)。例如,按 6w 可以将光标向前(向右)移动六个词。

如果你想进入一个模式,你必须按类似的组合键:

  • i 为插入模式
  • CTRL+C 回到正常模式
  • :wq 写入文件并关闭窗口。

最后,我们已经 列出了退出 Vim 的多种方法,如果你想了解一下的话。

这只是冰山一角。要学习更多关于 Vim 的知识,你可以使用vimtutor 命令,它可以给你提供大多数基本命令的信息,如删除、编辑、保存文件等。

GNU nano

nano 有一个基本的交互界面,在窗口的底部给你提供关键信息。

要想有个初步的了解,你可以参考我们的 nano 编辑器指南

![Terminal screen when you launch nano without argumentswithoutarguments] 13

你不需要参考手册页或任何文档来执行基本操作。这就是为什么与 Vim 相比,nano 被认为是用户友好的。

尽管如此,nano 中使用的一些术语仍然是“旧术语”,一个例子是 “ 写出 Write Out ”、“ 在哪里 Where Is ”短语,而不是分别用“ 保存 Save ”和“ 查找 Find ”。

但是,这并不是什么大问题。

虽然很容易习惯,但它与使用记事本或 Gedit(GUI 程序)并不完全相同。

例如,在大多数现代编辑器中,执行剪切操作的组合键通常是 Ctrl + X,但在 nano 中,它是 Ctrl + K

符号 ^ 是用来表示将 Ctrl 键作为修饰键使用,并与旁边的键组合使用。

你还可以找到像 Ctrl + F(将光标向前移动)、Ctrl + B(将光标向后移动)这样的组合键。一些快捷键包括:

  • Ctrl + X 退出
  • Ctrl + O 写入(或保存为)
  • Alt + U 撤销上一个动作
  • Ctrl + ← 向后退一个字
  • Ctrl + → 向前进一个字

你可以看看 GNU nano 的官方速查表 来学习更多的快捷键。

总的来说,nano 是一个更适合初学者的编辑器,当你只想偶尔编辑一个文件时,它可以简单地让你完成。

4、学习曲线

考虑到上面的所有信息,你一定已经意识到 Vim 与你所习惯的传统文本编辑器不同。

这是真的,这就是为什么 Vim 在学习的初始阶段会显得很艰难。

然而,对于高级用户来说,使用宏、自动补完等高级能力很重要,可以节省时间。

因此,如果你是一个程序员,或者碰巧经常编辑许多文件,Vim 的学习曲线可能是富有成效的。

另一方面,nano 提供了极小的学习曲线,而且感觉比基于图形用户界面的文本编辑器如 Gedit 或 Notepad 更让你熟悉。

哪个是最适合你的?

Vim 和 nano 都是合格的基于终端的文本编辑器。但是,当涉及到你如何与上述编辑器互动和使用时,它们有很大的不同。

Vim 很灵活,可以适应各种工作流程,前提是你已经习惯了它的工作方式。

相比之下,nano 工作起来很简单,可以帮助你编辑任何你想要的东西。

如果你还不确定,我建议先开始使用 nano。而且,如果你认为你需要更快地完成工作,并且想要更多的功能,那么就换成 Vim。

常见的问题

继续,让我来谈谈几个问题,这将有助于你获得一个良好的开端。

Vim 比 nano 好吗?

从技术上讲,是的。但是,如果你不需要它提供的所有功能,使用起来可能会感到力不从心。

程序员是否使用 Vim?

系统管理员和程序员喜欢 Vim 的高级功能。所以,是的,他们倾向于使用它。

nano 是否更受欢迎?

可以说是的。nano 是一个基于终端的编辑器,被大多数用户使用。此外,它还内置在大多数 Linux 发行版中。

因此,它在用户中普遍受欢迎,而 Vim 仍然是一个为特定人群服务的编辑器。


via: https://itsfoss.com/vim-vs-nano/

作者:Pratham Patel 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这就是我如何从 35 个 Vim 插件降到只有 6 个的原因。

 title=

当你用 —clean 选项启动 Vim 时,它以 “素” 模式展示 Vim。没有插件、没有配置,一切回到了最初。多年来,我收集了一堆配置语句,其中一些可以追溯到 MS-DOS 或 Windows 3.1 时期。我是这样打算的:从头开始,只用 Fedora 35 中可用的插件,找到一个好的配置起点。我可以在一周的编码生活中生存下来吗?我会找到答案的!

规则是这样的:尽可能少的配置语句,并且只使用 Fedora 35+ 中的插件。顺便说一下,如果你不是 Fedora 用户,也请继续阅读。你可以随时从你的操作系统软件包管理器手动安装或者使用 Vim 插件管理器安装这些插件。

在我开始之前,有一个大问题需要解决:用 Vim 还是 Neovim(Vim 的一个复刻)。好吧,这由你决定。这篇文章中的所有内容应该对两者都适用。然而,我只用 Vim 测试过。当你登录到一个只有 vi 可用的服务器时,所有的这些技能都会派上用场。它可以是一个旧的 UNIX 系统、一个安装了最少的软件以提高安全性的 Linux 服务器、一个容器中的交互式 shell,或者一个空间宝贵的嵌入式系统。

闲话少说,下面是我提炼出来的使用 Vim 进行编码的绝对最低限度的东西:

# dnf install --allowerasing vim-default-editor \
        vim-enhanced \
        vim-ctrlp \
        vim-airline \
        vim-trailing-whitespace \
        vim-fugitive \
        vim-ale \
        ctags

不要担心 —allowerasing 选项。在确认之前,只需查看一下安装的东西。这个选项的作用是告诉软件包管理器把现有的 nano-default-editor 包替换为 vim-default-editor。这是一个小软件包,它在 shell 配置文件中将 EDITOR 环境变量设置为 vim,如果你想默认使用 Vim(例如,与 git 一起使用),这是必须的。这是专门针对 Fedora 的。你不需要在其他发行版或操作系统上这样做,只要确保你的 EDITOR shell 变量被正确设置就行。

概览

简单介绍一下我认为好的、干净的插件集:

  • CtrlP:尽可能小的模糊查找插件(纯 vimscript)
  • Fugitive:一个 git 的必备工具
  • Trailing-whitespace:显示并修复(删除)尾部的空格
  • Airline:一个改进的状态行(纯 vimscript)
  • Ale:在你打字时高亮显示错别字或语法错误
  • Ctags:不是 Vim 插件,但却是一个非常需要的工具

还有其他的模糊查找插件,如 command-t 或我最喜欢的 fzf.vim(非常快)。问题是,fzf.vim 不在 Fedora 中,而我想要尽可能少的配置。CtrlP 就可以了,而且配置它更容易,因为它不需要什么依赖。

如果让我选择一个绝对最小的配置,那就是:

# cat ~/.vimrc
let mapleader=","
let maplocalleader="_"
filetype plugin indent on
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
set exrc
set secure

但这可能太极端了,所以这里是一个稍大的配置,下面是我的详细解释:

" vim: nowrap sw=2 sts=2 ts=2 et:

" leaders
let mapleader=","
let maplocalleader="_"

" filetype and intent
filetype plugin indent on

" incompatible plugins
if has('syntax') && has('eval')
  packadd! matchit
end

" be SSD friendly (can be dangerous!)
"set directory=/tmp

" move backups away from projects
set backupdir=~/.vimbackup

" fuzzy searching
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
nnoremap <leader>b :CtrlPBuffer<cr>
nnoremap <leader>t :CtrlPTag<cr>
nnoremap <leader>f :CtrlPBufTag<cr>
nnoremap <leader>q :CtrlPQuickfix<cr>
nnoremap <leader>m :CtrlPMRU<cr>

" buffers and quickfix
function! ToggleQuickFix()
  if empty(filter(getwininfo(), 'v:val.quickfix'))
    copen
  else
    cclose
  endif
endfunction
nnoremap <leader>w :call ToggleQuickFix()<cr>
nnoremap <leader>d :bd<cr>

" searching ang grepping
nnoremap <leader>g :copen<cr>:Ggrep!<SPACE>
nnoremap K :Ggrep "\b<C-R><C-W>\b"<cr>:cw<cr>
nnoremap <leader>s :set hlsearch! hlsearch?<cr>

" ctags generation
nnoremap <leader>c :!ctags -R .<cr><cr>

" per-project configs
set exrc
set secure

使用逗号作为引导键

我喜欢把我的 引导键 映射成逗号 ,,而不是默认的反斜杠 \。当你的手处于书写位置时,它是 Vim 中最接近的自由键。另外,这个键在大多数键盘布局中都是一样的,而 \ 在每个型号或布局都不一样。我很少使用 本地引导键,但下划线 _ 看起来很合适。

延伸阅读:

文件类型和关闭语法高亮

接下来是非常重要的 filetype 命令。看,Vim 自带“内置电池”,8.2 版本包含 644 种语言的语法高亮,251 个文件类型定义(ftplugins),以及 138 种语言的缩进规则。然而,缩进在默认情况下是不启用的,也许是为了给所有人提供一个一致的编辑体验。我喜欢启用它。

一个简单的技巧:如果你正在编辑一个非常大的文件,并且 Vim 感觉很慢,你可能想禁用语法高亮来加快速度。只要输入 :syn off 命令即可。

延伸阅读:

Matchit 插件

Vim 甚至额外带有使得一些功能不兼容的插件,其中一个相当有用。它就是 matchit 插件,它使按下 % 键可以在某些语言中查找匹配的括号。通常情况下,你可以找到一个块的开始或结束(开始和结束括号)或 HTML 匹配标签及类似的。

延伸阅读:

交换文件

我想从我的旧配置中保留的许多设置之一是使用 /tmp 进行交换,并在我的家目录的一个单独目录中创建备份,你需要用 mkdir ~/.vimbackup 来创建这个目录。重要的是要明白,当你开始编辑时,Vim 会创建一个名为 “交换文件” 的副本,所有未保存的工作都会保存在这个文件中。所以即使停电了,你的交换文件也包含了大部分未保存的工作。我更喜欢使用 tmpfs,因为我所有的笔记本电脑和服务器都有 UPS 保护,而且我经常保存。另外,大多数情况下,你会使用到交换文件是当你的 SSH 连接丢失而不是由于停电时。对于大文件来说,交换文件可能相当大,我很珍视我的固态硬盘,所以我决定这样做。如果你不确定,可以删除这句话,使用 /var/tmp,这样更安全。

延伸阅读;

模糊寻找插件

现在,模糊查找是一个我不能没有的插件。在服务器上当你每天需要打开 20 个文件时,使用 :Ex:e:tabe 等命令打开文件是没问题的。而当编码时,我通常需要打开数百个文件。正如我所说,CtrlP 很好地完成了这项工作。它很小,没有依赖性,纯 Vim。它用 Ctrl + P 组合键打开,这对我来说有点奇怪。我知道一些著名的编辑器(我记得是 VSCode)使用这个组合键。问题是,这已经是很重要的 Vim 绑定键,我不想覆盖它。所以对我来说,赢家是 引导键 + 引导键(逗号按两次)。

ctrlp_user_command 只是改变了 CtrlP 获取文件列表的方式。它不使用内置的递归文件列表(glob),而是使用 git ls-files,这通常更好,因为它忽略了 .gitignore 中的东西,所以像 node_modules 或其他可能拖慢列表的不相关目录不会受到影响。

使用 引导键 + B/T/F/Q/M 来打开缓冲区、标签、当前文件的标签、快速修复缓冲区和最近使用的文件的列表,非常有用。具体来说,一旦你用 ctags 生成了标签列表,这基本上就是数百种编程语言的“去……定义处”,而且不需要插件!这都是 Vim 内置的。现在澄清一下,当我说输入 引导键 + B 时,是指按下逗号,然后按 B 键,而不是像用 ControlShift 那样一起按。

延伸阅读:

缓冲区管理

虽然现在 Vim 支持标签,但缓冲区管理是掌握 Vim 的一个重要技能。我通常会有很多缓冲区,我需要经常做 :bdelete。那么,引导键 + D 似乎是一个不错的选择,可以更快地完成这个任务。我也喜欢关闭 Quickfix 窗口,所以也有 引导键 + W 的组合键,我在浏览搜索结果时经常使用这个功能。

延伸阅读:

Ggrep 和 fugitive 插件

说到搜索,它和打开文件一样重要。我希望能够对代码库进行检索。为此,有一个来自 fugitive 插件的很棒的 :Ggrep 命令,它使用 git grep,忽略了垃圾文件,只搜索 Git 中的内容。由于 Shift + K 是 Vim 中的一个自由键,它非常适用于自动检索光标位置的词语。最后,能够使用 引导键 + G 输入任意的搜索模式也很好。注意,这将打开一个叫做 Quickfix 的窗口,你可以在这里浏览结果、查看下一个/上一个/最后一个/第一个出现的地方,等等。这个窗口也用于编译器或其他工具的输出,所以要熟悉它。如果你对此感到陌生,我建议进一步阅读文档。

延伸阅读:

用 fugitive 进行搜索、检索

顺便说一下,用 / 键搜索是智能和大小写敏感的,这意味着如果所有的搜索字符都是小写的,Vim 的搜索会忽略大小写。默认情况下,它会高亮显示结果,我觉得我已经敲了无数次的 :noh(来关闭高亮显示)。这就是为什么我有 引导键 + S 来切换高亮显示。我建议以后也多读读手册中关于搜索的内容。

接下来是搜索、检索。fugitive 插件已经为你提供了。使用命令 :Ggrep pattern 来进行 git grep,结果会进入 Quickfix 窗口。然后简单地使用快速修复命令(:cn:cp 等等)浏览结果,或者简单地使用 :CtrlPQuickfix引导键 + Q)来直观地滚动它们。CtrlP 的快速修复整合的酷炫之处是,你可以通过输入以匹配文件名或内容来进一步在搜索结果中搜索。

延伸阅读:

Ctags

引导键 + C 可以生成一个 ctags 文件,以便更好地导航,这在处理一个新的代码库或做一个有很多跳转的较长的编码任务时很有用。ctags 支持数百种语言,而 Vim 可以利用所有这些知识来导航。后面会有更多关于如何配置它的内容。注意我已经讨论过 引导键 + T 来打开所有标签的模糊搜索,记得吗?这两个是非常相同的。

延伸阅读:

按键映射

能够通过在项目目录下创建一个 .vimrc 文件来覆盖该项目中的任何设置是一个好主意。只要把它放在(全局的) .gitignore 中,以确保你不需要在每个项目中编辑成千上万的 .gitignore 文件。这样的一个项目的 .vimrc 可以是这样的(对于使用 GNU Makefile 的 C/C++ 项目):

" coding style
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
" include and autocomplete path
let &path.="/usr/local/include"
" function keys to build and run the project
nnoremap <F9> :wall!<cr>:make!<cr><cr>
nnoremap <F10> :!LD_LIBRARY_PATH=/usr/local/lib ./project<cr><cr>

正如你所看到的,我通常将 F2F10 等键映射到编译、运行、测试和类似的操作。用 F9 来调用 make,听起来不错。还记得 MS-DOS 上的蓝色 Borland IDE 吗?

如前所述,在全局范围内忽略 .vimrc 和(由 ctags 生成的)tags 是个好主意,所以不需要每次都更新 .gitignore

# git config --global core.excludesfile ~/.gitignore
# cat ~/.gitignore
/.vimrc
/tags
/TAGS

在我的个人配置中还有几条只与那些非美国键盘布局的人有关(我用捷克语)。我需要用“死键”来输入许多字符(LCTT 译注:“死键”是一种通过将变音符号与后面的字母结合起来打出重音字符的方法。这种方法在历史上被用于机械打字机),这根本不可能,我宁愿输入命令而不是按那些难以按下的组合键。这里有一个解决问题的办法:

" CTRL-] is hard on my keyboard layout
map <C-K> <C-]>
" CTRL-^ is hard on my keyboard layout
nnoremap <F1> :b#<cr>
nnoremap <F2> :bp<cr>
nnoremap <F3> :bn<cr>
" I hate entering Ex mode by accident
map Q <Nop>

延伸阅读:

功能键在 Vim 中都是自由的,除了 F1,它被绑定在帮助上。我不需要帮助,并不是说我已经会对 Vim 了如指掌,并不是。但如果需要的话,我可以简单地输入 :help。而 F1 是一个关键的键,离 Esc 键如此之近。我喜欢将它用于缓冲区交换(:b#),将 F2/F3 用作下一个/上一个。你越是与缓冲区打交道,你就越需要这个。如果你没有使用过 Ctrl + ^,我建议你要习惯于它。哦,你有没有丑陋地输入 :visual 进入过 Ex 模式?许多初学者都不知道如何从该模式下退出 Vim。对我来说,这就是打扰,因为我很少使用它。

现在,熟悉 ctags 是成功使用 Vim 的一个关键因素。这个工具支持数百种语言,它不小心就为你不想创建标签的文件创建它,因此我建议忽略典型的垃圾目录:

# cat ~/.ctags.d/local.ctags
  --recurse=yes
  --exclude=.git
  --exclude=build/
  --exclude=.svn
  --exclude=vendor/*
  --exclude=node_modules/*
  --exclude=public/webpack/*
  --exclude=db/*
  --exclude=log/*
  --exclude=test/*
  --exclude=tests/*
  --exclude=\*.min.\*
  --exclude=\*.swp
  --exclude=\*.bak
  --exclude=\*.pyc
  --exclude=\*.class
  --exclude=\*.cache

Airline 插件

我一定不能忘记 Vim 的 Airline 插件。在 Fedora 的两个插件中,这个插件很轻量级,不需要外部依赖,而且可以开箱即用我所有的字体。你可以定制它,而且还有主题之类的东西。我只是碰巧喜欢它的默认设置。

我必须提到,有两个主要的 Ctags 项目:Exuberant Ctags 和 Universal Ctags。后者是一个更现代的复刻。如果你的发行版有,就用它。如果你在 Fedora 35+ 上,你应该知道你现在用的是 Universal Ctags。

总结

作为总结,我的建议是这样的。尽量保持你的 Vim 配置流畅和干净。这将在未来得到回报。在我转换到新配置之后,我不得不重新学习“写入并退出”的命令,因为我总是不小心把它打成 :Wq,而我在旧的配置里有一个“小技巧”,让它实际上按我的意思工作。好吧,这个可能真的很有用,并能入选,我希望你能明白我的意思:

:command Wq wq
:command WQ wq

最后的一个快速技巧是:你可能需要经常改变你的默认 Vim 配置,来找到我在这里向你介绍的和你自己口味之间的舒适区。使用下面的别名,这样你就不需要一直搜索历史。相信我,当一个 Vim 用户在命令历史里搜索 “vim” 时,找不到什么是相关的内容:

alias vim-vimrc='vim ~/.vimrc'

就是这些了。也许这可以帮助你在没有大量插件的情况下在 Vim 的丰富世界遨游。“简简单单” 的 Vim 也很不错!

要尝试你刚刚读到的内容,请安装软件包并检出这些配置:

test -f ~/.vimrc && mv ~/.vimrc ~/.vimrc.backup
curl -s https://raw.githubusercontent.com/lzap/vim-lzap/master/.vimrc -o ~/.vimrc
mkdir ~/.vimbackup

特别感谢 Marc Deop 和 Melanie Corr 对本文的审阅。

更新

我已经在这种配置下生存下来了!我唯一的纠结是 CtrlP 插件的结果顺序不同。文件的模糊算法与 fzf.vim 插件不同,所以我以前用各种搜索词能找到的文件现在找不到了。我最后安装了 Fedora 的 fzf 包以获得更相关的文件搜索,它附带了一个 vim 函数 FZF,可以绑定到引导键组合上。请看我的 GitHub 仓库 中更新后的配置文件。一路走来,我学到了很多东西。有一些键的绑定我已经忘记了,这要感谢许多插件。

这篇文章最初发表在 作者的网站 上,经许可后重新发表。


via: https://opensource.com/article/21/12/vanilla-vim-config

作者:Lukáš Zapletal 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Vim 有很多技巧,即使是用过它很多年的人仍然可以学习新东西。

 title=

Vim 总在那里。Vim 是当今最流行的文本编辑器之一。这在很大程度上是因为它随处可见。当你通过 SSH 连接到另一个系统时,你可能找不到 EmacsNanoVSCodium,但你可以放心,Vim 就在那里。

在本文中,我介绍了一些你可以用 Vim 做的中级事情,以加快你的工作流程并通常让你的一天更轻松。本文假设你以前使用过 Vim,已经了解编辑器的基础知识,并希望将你的 Vim 技能提高一个档次。Vim 充满了有用的技巧,没有人真正掌握它,但本文中的五个技巧可以提高你的技能,并希望让你更加爱上最受欢迎和喜爱的文本编辑器之一。

Vim 书签

Vim 提供了一种在文本中添加书签的简单方法。假设你正在编辑一个大文件,并且当前的编辑会话要求你在文件中不同位置的两段文本之间来回跳转。

首先,你输入 m(用于标记)为当前位置设置一个书签,然后为其命名。例如,如果我正在编辑的文件中有一个名称列表,我想稍后再跳回,我可以使用 mn(n 表示名称)为文件的该部分添加书签。

稍后,在编辑文件的另一部分并希望跳回该名称列表时,我有两个选项。我可以输入 `n(反引号 n)转到书签的位置,或者我可以键入 'n(单引号 n)转到书签所在行的开头。

当我不再需要书签时,我可以使用 :delmarks n 将其删除。:marks 会显示我所有的书签。

请注意,我使用小写字母来命名我的书签。这是故意的。你可以使用小写字母作为本地书签,使用大写字母来使书签在多个文件中具有全局性。

Vim 用户定义的缩写

如果你正在处理的文本有一个长词或短语多次出现,那么每次都完整地输入它会很快变得烦人。幸运的是,Vim 提供了一种创建缩写的简单方法。

要将 Acme Painted Fake Roadways, Inc. 的用户定义缩写设置为 apfr, 你需要输入 :ab apfr Acme Painted Fake Roadways, Inc.。现在当在编辑模式时,当你在输入 apfr 后面更上空格,就会变成 Acme Painted Fake Roadways, Inc.

当你关闭 Vim 会话时,你使用 :ab 设置的任何缩写都会丢失。如果你想在此之前取消设置缩写,你可输入 :una apfr

Vim 自动补全

许多人没有意识到 Vim 带有自动补全功能。如果你在文件中输入以前使用过的长词,这是一个方便的工具。

假设你正在撰写一篇文章,多次使用 Antarctica 一词。使用一次后,下次你可以只输入前几个字母。例如,你输入 Ant 然后按下 Ctrl+P。 Vim 要么补全单词(如果只有一个选项),要么为你提供可以用箭头键选择的单词列表,继续输入以进一步缩小搜索范围并使用 Tab 键选择单词。

Vim 范围选择

使用 Vim,你可以轻松地对文件中的一系列行执行操作。你可以通过起始行号、逗号和结束行号(包括)来指示范围。除了文字行号之外,你还可以使用句点(.)表示当前行,使用美元符号 ($) 表示文件缓冲区中的最后一行,以及使用百分号(%)表示整个文件。

这里举几个例子来说明。

如果要删除第 2 到 10 行,请输入(在命令模式下):

:2,10d

要删除从第 25 行到文件末尾的每一行:

:25,$d

你可以使用以下命令删除每一行:

:%d

要将第 5 到 10 行复制(或转移)到第 15 行之后:

:5,10t 15

要将第 5 行到第 10 行移动到第 15 行之后(而不是复制):

:5,10m 15

Vim 提高生产力

我希望这篇文章教会了你一些关于 Vim 文本编辑器的新知识。 Vim 有很多技巧,即使是使用了多年的人仍然可以学习新事物。总有一些新的和有用的东西可以学习。


via: https://opensource.com/article/22/3/vim-features-productivity

作者:Hunter Coleman 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

让我们探索一个基于终端的文件浏览器,可以使用 Vim 风格的键绑定。

当在命令行中浏览 Linux 目录结构 时,人们经常依赖 cd 命令

这也没什么不好,因为你登录到任何一个 Linux 系统上都有 cd 命令。

然而,如果系统是由你维护的,你想更直观地看到目录,那么文件管理器比 cdtree 命令要好得多。

是的,你也可以在终端中找到文件管理器。它们可能不如 Nautilus 这样的图形界面应用,但仍然比普通的老命令好。

有几个 TUI 文件浏览器,我们已经介绍了其中的几个。今天,我们来看看 vifm

vifm 简介

vifm 是一个命令行工具,它是一个文件管理器,导航和操作文件系统对象的键绑定与 Vim 类似。如果你不清楚我所说的“文件系统对象”是什么意思,它们是文件、目录、符号链接、硬链接等。

除了非常直观的 Vim 交互键绑定外,下面是 vifm 为你提供的一系列功能:

  • 一个就在你的终端中的快速文件管理器
  • 从文件管理器内编辑文本文件
  • vifm 使用 curses 界面
  • vifm 是跨平台的(在 Cygwin 的帮助下甚至可以在 Windows 上工作;它应该可以,但我没有测试过)
  • 支持 Vim 风格的键绑定输入,如 ddjkhl
  • vifm 插件 可以在 Vim 中使用,这样就可以通过 Vim 打开文件
  • 支持 Vim 命令的自动补完
  • 支持多个面板
  • 可以使用 [或不使用] 正则表达式进行批量重命名

在 Linux 上安装 vifm

vifm 软件包并不算新,因此在默认情况下,即使是“稳定”发行版(如 Debian)的软件库中也很容易找到它。

在 Debian 和基于 Debian 的发行版(如 Ubuntu、Pop!\_OS、Mint 等)之上,你可以 使用 apt 软件包管理器 来安装 vifm

sudo apt install vifm

使用 pacman 软件包管理器基于 Arch 的 Linux 发行版上安装 vifm

sudo pacman -S vifm

vifm 在 Fedora 和 RHEL 仓库中也有;用 DNF 软件包管理器安装它:

sudo dnf install vifm

安装好了 vifm,你可以简单地在终端输入 vifm,像下面这样,然后启动它:

vifm

vifm 的用户界面

当你第一次启动 vifm 时,默认情况下,它启动时显示你当前所在的目录的概览。你还会注意到,vifm 默认使用两个窗格。

默认的 vifm 界面,包括一个正常的视图(隐藏的文件不可见)和两个默认打开的窗格

如果你对界面感到困惑,只需尝试按 j 键将光标向下移动一行,按 k 键将光标向上移动一行。你可以通过按 h 键向上移动一级目录。就像 Vim 中一样!

如果你的光标目前在一个文件上,按 l 键将在 Vim 中打开该文件(如果没有另外说明的话)。但如果你的光标在一个目录上,按 l 键将导航到该目录并显示其内容。

你也可以通过按 Ctrl + g 键绑定,从文件管理器中获得关于文件或目录的详细信息。

 键绑定如何显示目录/文件信息的屏幕截图

你可以按 za 键来显示被隐藏的文件和目录(开头有 . 的文件和目录默认是隐藏的)。如果这些特殊的文件和目录没有被隐藏,按 za 键将会隐藏它们。

你可以用 zo 键绑定一直显示隐藏的文件和目录,或用 zm 键绑定使这些项目一直不可见。

举例说明,当你按下  键绑定时的情况

总结

由于它是基于 Vim 的,你可以用 vifmrc 文件来配置它。在 vifm wiki 上有最新的默认绑定键的速查表,在 这里。这个项目的文档非常好。

vifm 默认按键绑定

vifm 是一个了不起的文件管理器,特别是对于 Vim 用户来说,因为它与 Vim 生态系统整合得非常好。它将许多 Vim 的功能和按键绑定整合到一个文件管理器中。默认的双窗格布局使其更具生产力。

不要犹豫,尝试一下 vifm。它真的是一个了不起的命令行工具。


via: https://itsfoss.com/vifm-terminal-file-manger/

作者:Pratham Patel 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

非技术人员也可以使用 Linux 和开源软件进行非技术工作。这是我的故事。

(LCTT 译注:本文原文标题用 “F(r)iction” 一语双关的表示了 小说 fiction 写作过程中的 摩擦 friction 苦恼。)

时间:2009 年 12 月。我准备辞去工作。

我希望专心写我的第一本书;我的工作职责和技术环境都没办法让我完成这本书的写作。

写作是件苦差事。

在现代世界中,很少有工作像写作这样奇特或者说艰巨的追求 —— 面对一张白纸,坐下来,迫使你的大脑吐出文字,向读者传达一个想法。当然,我并不是说写作不能与他人合作完成,而只是想说明,对于作家来说,自己着手写一部新作品是多么令人生畏。小说还是非小说写作都是如此。但由于我是一名小说家,我在这篇文章中主要想关注是小说的写作。

还记得 2009 年是什么样子吗?

智能手机已经诞生 3 年了 —— 而我还在使用功能机。笔记本电脑又大又笨重。同时,基于云的生产力 Web 应用还处于起步阶段,并不那么好用。从技术上讲,像我这样的作家们正在以 Gmail 账户(和一个非常年轻的基于云的存储服务 Dropbox)作为一个始终可用的选项来处理自己的草稿,即使我的个人电脑不在身边。虽然这与作家们必须要使用打字机(或,上帝保佑,使用笔和纸)工作时相比已经是一个很好的变化了,但并没有好多少。

首先,对手稿的版本控制是一场噩梦。此外,我为简化工作流程而在工具包中添加的工具越多,我转换写作环境(无论是用户界面还是用户体验)的次数就越多。

我是在 Windows 记事本上开始写草稿的,然后把它保存在家里电脑上的 MS Word 文档中,用电子邮件发给自己一份副本,同时在 Dropbox 上保留另一份副本(因为在上班时无法访问 Dropbox),在公司时对该文件的副本进行处理,在一天结束时用电子邮件发给自己,在家里的电脑上下载它,用一个新的名字和相应的日期保存它,这样我就能认出该文件是在公司(而不是家里)进行修改的……好吧,你知道这是怎样一个画面。如果你能感受到这种涉及 Windows 记事本、MS Word、Gmail 和 Dropbox 的工作流程有多么疯狂,那么现在你就知道我为什么辞职了。

让我更清醒的是,我仍然知道一些作家,其中竟然有些还是好作家,依然在使用我 2009 年遵循的工作流程的各种变体。

在接下来的三年里,我一直在写手稿,在 2012 年完成了初稿。在这三年里,技术环境发生了很大变化。智能手机确实相当给力,我在 2009 年遇到的一些复杂情况已经消失了。我仍然可以用手机处理我在家里外理的文件(不一定是新的写作,但由于手机上的 Dropbox,编辑变得相当容易)。我的主要写作工具仍然是微软的 Windows 记事本和 Word,我就是这样完成初稿的。

小说 《第一声》 于 2016 年出版,获得了评论界和商业界的好评。

结束了。

或许我是这么想的。

我一完成手稿发给了编辑,就已经开始着手第二部小说的写作。我不再为写作而辞职,而是采取了一种更务实的方法:我会在每年年底请两个星期的假,这样我就可以到山上的一个小木屋里去写作。

花了半天时间我才意识到,那些让我讨厌的 写作工具 和工作流程并没有消失,而是演变成了一个更复杂的野兽。作为一个作家,我并不像我想像的那样高产或高效。

新冠期间的 Linux

时间:2020 年。世界正处于集体疯狂的边缘。

(为某些原因而删改的文字)一种新型病毒正在演变成 1911 年以来的第一次全球大流行疾病。3 月 20 日,斯里兰卡,跟随世界上大多数国家的脚步,封城了。

四月是斯里兰卡旱季的高峰。在像科伦坡这样的混凝土丛林中,温度可以达到三十多度,湿度高达九十多度。在最好的情况下,它也可以使大多数人精神错乱,更别说在全球大流行病正在进行的时候,被困在没有一直开着空调的家里?真是一个让人疯狂的好温床。

让我的疯狂是 Linux,或者说是“发行版跳跃”,像我们在开源社区中所说的。

我越在各种 *nix 发行版间蹿来蹿,我就对控制的想法越迷恋。当任何事情似乎都不在我们的控制之中时 —— 即使是与另一个人握手这样的简单行为 —— 我们自然会倾向于做那些我们感觉更有控制力的事。

在我的生活中,还有什么比计算机更容易被控制的呢?自然,这也延伸到我的写作工具和工作流程。

通往 Vim 之路

有一个关于 Vim 的笑话完美地描述了我对它的第一次体验:人们对 Vim 难以割舍是因为他们不知道怎么关掉它。

我试图编辑一个配置文件,而 新安装的 Ubuntu 服务器 只预装了 Vim 文本编辑器。第一次是恐慌 —— 以至于我重新启动了机器,以为操作系统没有识别出我的键盘。然而当它再次发生时,不可避免地,我谷歌搜索:“我该如何关闭 Vim?

哦。这真有趣,我想。

但为什么呢?

要理解我为什么会对一个复杂到无法关闭的文本编辑器有点兴趣,你必须了解我是多么崇拜 Windows 记事本。

作为一个作家,我喜欢在它的没有废话、没有按钮、白纸一样的画布上写作。它没有拼写检查。它没有格式。但这些我并不关心。

对于我这个作家来说,记事本是有史以来最好的草稿写作板。不幸的是,它并不强大 —— 所以即使我会先用记事本写草稿,一旦超过 1000 字,我就会把它移到 MS Word 上 —— 记事本不是为散文而生的,当超过这个字数限制时,这些局限就会凸显出来。

因此,当我把我所有的计算机工作从 Windows 上迁移走时,我第一个要安装的就是一个好的文本编辑器。

Kate 是第一个让我感到比用 Windows 记事本更舒服的替代品 —— 它更强大(它有拼写检查功能!),而且,我可以在同一个环境中搞一些业余爱好式的编程。

当时它是我的爱。

但后来 Vim 出现了。

我对 Vim 了解得越多,看开发者在 Vim 上现场进行编码的次数越多,我就越发现自己在编辑文本时更想打开 Vim。我使用 Unix 传统意义上“文本编辑”这一短语:编辑配置文件中的文本块,或者有时编写基本的 Bash 脚本。

我仍然没有用 Vim 来满足我的散文写作需求。

在这方面我有 Libre Office。

算是吧。

虽然它是一个适当的 MS Office 替代品,但我发现自己没有被它打动。它的用户界面可能比 MS Word 更让人分心,而且每个发行版都有不同的 Libre Office 软件包,我发现自己使用的是一个非常零散的工具包和工作流程,更不用说用户界面在不同的发行版和桌面环境中差异是多么大。

事情变得更加复杂了,因为我也开始读我的硕士学位了。这时,我要在 Kate 上做笔记,把它们转移到 Libre Office 上,然后保存到我的 Dropbox 上。

我每天都面临着情境转换。

生产力下降,因为我不得不打开和关闭一些不相关的应用程序。我需要一个写作工具来满足我所有的需求,无论是作为一个小说家,还是一个学生、亦或是一个业余的程序员。

这时我意识到,解决我场景切换噩梦的方法也同样摆在我的面前。

这时,我已经经常使用 Vim —— 甚至在我的安卓手机上利用 Termux 使用它。这使我对要把所有东西都搬到 Vim 上的想法感到相当舒服。由于它支持 Markdown 语法,记笔记也会变得更加容易。

这仅仅是大约两个月前的事。

现在怎么样了?

时间:2021 年 4 月。

坐在出租车上,我通过 Termux(借助蓝牙键盘)用 Vim 在手机上开始写这个草稿。我把文件推送到 GitHub 上我的用于写作使用的私人仓库,我从那里把文件拉到我的电脑上,又写了几行,然后再次出门。我把新版本的文件从 GitHub 拉到我的手机上,修改、推送,如此往复,直到我把最后的草稿用电子邮件发给编辑。

现在,场景切换的情景已经不复存在。

在文字处理器中写作所带来的分心问题也没有了。

编辑工作变得无比简单,而且更快了。

我的手腕不再疼痛,因为我不再需要鼠标了。

现在是 2021 年 4 月。

我是一名小说家。

而我在 Vim 上写作。

怎么做的?我将在本专栏系列的第二部分讨论这个工作流程的具体内容,即非技术人员如何使用免费和开源技术。敬请关注。


via: https://news.itsfoss.com/how-i-started-loving-vim/

作者:Theena 选题:lujun9972 译者:piaoshi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出