在上一篇文章中,我们熟悉了终端模式,并且配置了终端模式的一些操作。但是它总是有那么一点不符合我们的使用习惯。这篇我们将通过强大的插件来完善终端操作的体验。

在介绍插件之前让我们先回退到上一个版本,我们把上一篇文章中的配置全部从配置文件中剔除。先别着急喷我把各位小伙伴带到沟里去了,动态的调整自己的配置是常有的事,例如我发现了某些好用的插件、某些自己的配置可以淘汰一些插件又或者改变操作习惯等等原因都会导致我们修改配置。所以还是事先习惯的好。

toggleterm 插件介绍

在 packer 中我们使用如下语句来进行安装

use {"akinsho/toggleterm.nvim", tag = 'v2.*'}

如果我们用的是 7.0及以上的neovim,可以使用它的 v2版本,否则版本这里应该写上 v1

接着我们还是按照之前的惯例,新增一个配置文件并且在init.lua中引用

local opt = require("toogleterm").setup({})

之后我们可以使用 :ToggleTerm 来打开一个新终端

相关配置

我们可以对它进行一些简单的配置

local opt = require("toggleterm").setup({
open_mapping = [[<c-\>]],
-- 打开新终端后自动进入插入模式
start_in_insert = true
-- 在当前buffer的下方打开新终端
direction = 'horizontal'
})

这里我们使用快捷键 <Ctrl+\> 来打开或者关闭终端。

我们使用 start_in_insert 配置打开新终端后自动进入插入模式,这样就不需要使用自动命令自己干这个事情了。

另外我这里仍然采用它默认的打开方式,默认在下方打开一个新终端,根据个人习惯可以改为弹出式窗口。根据官方文档,还支持 verticalfloattab。相信各位小伙伴从名字上就能知道它们分别代表何种样式。

在之前介绍终端的时候说过,可以使用 <Ctrl+\><Ctrl+n> 来退出终端模式,这里我们仍然对它进行快捷键绑定,仍然使用 来退出终端模式

在退出终端模式之后,我们就可以使用相关快捷键来移动光标到指定窗口了,但是这里我们希望在终端模式中能够移动光标,所以这里还是使用快捷键映射的方式来解决这个问题

vim.api.nvim_set_keymap("t", "<Esc>", "<C-\\><C-n>", {noremap = true, silent = true})
vim.api.nvim_set_keymap("t", "<leader>l", "<Cmd> wincmd l<CR>", {noremap = true, silent = true})
vim.api.nvim_set_keymap("t", "<leader>h", "<Cmd> wincmd h<CR>", {noremap = true, silent = true})
vim.api.nvim_set_keymap("t", "<leader>j", "<Cmd> wincmd j<CR>", {noremap = true, silent = true})
vim.api.nvim_set_keymap("t", "<leader>k", "<Cmd> wincmd k<CR>", {noremap = true, silent = true})

如果我们采取上一节的方案,将 l映射为 <C-> 的话,会先退出终端模式,后续再回来终端的话,还得重新进入终端模式。这里我们希望不改变它的模式的情况下来进行移动操作,那么就只能使用命令模式了。我们之前介绍的执行命令都是以 :开头,但是它只局限于在普通模式下使用。我们在绑定快捷键时对应的真实按键会原封不同的在vim中进行输入,如果在插入模式中使用 :这种形式,就相当于在当前buffer中输入这些内容,也就是说我们无法在插入模式中使用普通模式那种格式的命令。

这里我们引入一个新的指令 它只能用于快捷键映射的场合,表示执行后面对应的命令。在普通模式下它的作用和使用 :相同,但是在vim会将键盘输入作为字符写入buffer的模式下使用 将会直接将这些作为命令。

另外在命令中我们无法再使用像之前在普通模式下使用的那些诸如 之类的移动光标的快捷键,这里我们使用 wincmd l来代替之前快捷键的功能。

自定义终端类型

使用自定义终端可以让我们在某些时候快速打开一些有特定用途的终端,例如 git 命令、htop 命令或者 pythonnode 等的交互式窗口。

这里我们以 pythonhtop 为例来介绍如何自定义这些自己的终端窗口。

为了自定义自己的终端我们需要先获取到 toggleterm插件提供的 Terminal 对象,利用这个对象的 new 方法来创建一个自己的终端。最后在需要弹出或者关闭终端的时候,调用 new 出来的终端对象的 toggle 方法。

new方法接受一个 table作为参数,用于定义新终端的各种属性,下面是几个重要的属性

  • cmd: 在新终端中执行的命令
  • direction: 终端打开的方式,与上面介绍的配置终端的 direction参数相同
  • dir: 执行命令的工作目录
  • env: 该命令使用的环境变量,以键值对的形式给出

了解了这些,我们来定义需要的终端。

local Terminal  = require('toggleterm.terminal').Terminal
local pyterm = Terminal:new({
cmd = 'python',
direction = 'horizontal'
}) function python_toggle()
pyterm:toggle()
end vim.api.nvim_set_keymap("n", "<leader>py", "<Cmd>lua python_toggle()<CR>", {noremap = true, silent = true})

这里我们定义了一个执行 python命令的终端,而且还定义了启动函数,最后定义了一个快捷键在命令行执行这一个启动函数,快速打开这么一个窗口



我们按照这个思路再来定义一个 htop 的窗口

local htopterm = Terminal:new({
cmd = 'htop',
direction = 'float'
}) function htop_toggle()
htopterm:toggle()
end vim.api.nvim_set_keymap("n", "<leader>ht", "<Cmd>lua htop_toggle()<CR>", {noremap = true, silent = true})

到此为止,我们已经配置了一个基本可以使用的终端环境了,但是我还不知道该如何使用它同时打开多个窗口,这应该算是它的一个缺陷吧,如果有这个应用场景可以考虑使用 tmux加入工作流中。

本篇就到此为止了。

从零开始配置vim(19)——终端配置的更多相关文章

  1. 简单快捷好用的vim配置和终端配置推荐

    vim 配置实用spf13-vim,安装方便简单快捷,极力推荐. 另外oh-my-zsh 终端配置很好,与之搭配使用效果更佳. 安装都很简单,一个脚本搞定, 都是在gitHub上开源的,自行搜索,这里 ...

  2. 程序员的 Ubuntu 19.10 配置与优化指南

    原文地址:程序员的 Ubuntu 19.10 配置与优化指南 0x00 环境 CPU: Intel Core i9-9900k GPU: GeForce RTX 2070 SUPER RAM: DDR ...

  3. Mac下终端配置(item2 + oh-my-zsh + solarized配色方案)

    最近重装了系统,于是便重新配置了一下终端,使其更符合用户习惯. 效果如下: 拥有语法高亮,命令行tab补全,自动提示符,显示Git仓库状态等功能. 安装 首先我们下载的 iTem2 这个软件,比Mac ...

  4. Mac 下升级 vim 并自己配置 vim 的过程

    1.升级 vim 我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim -- ...

  5. linux 配置vim(vimrc)

    打开终端:ctrl+alt+t 进入vim文件:cd /etc/vim 打开vimrc文件:sudo gedit vimrc 然后在行末if语句前加上下面的内容,"  这个符号为注释,后面内 ...

  6. Mac终端配置,DIY你的Terminal (iTerm 2 + Oh My Zsh)

    使用mac osx一年以来,自带的Terminal终端一直都是白底黑字,食之无味,越来越缺乏新鲜感,怎么也得想个法子来刺激下眼球. 不然花那么多大洋买你回来是要哪般,难道真是为来学习工作??? 怎么可 ...

  7. vim的简单配置

    本文大部分内容转载自:https://blog.csdn.net/lhy2932226314/article/details/69668891 vim是从 vi 发展出来的一个文本编辑器.功能丰富,在 ...

  8. Centos下Vim编辑器基本配置

    设置 Vim编辑环境 配置 有两种方式: 1,是在/etc/vimrc 进行设置,这种设置方法会作用与所有登录到Linux环境下的用户.不建议使用. 2,在用户登录的 ~ 目录下创建一个 .vimrc ...

  9. 解决配置vim中文乱码的问题

    解决linux下vim乱码的情况:(修改vimrc的内容) 全局的情况下:即所有用户都能用这个配置 文件地址:/etc/vimrc 在文件中添加: set fileencodings=utf-8,uc ...

  10. archlinux 源配置 桌面美化 终端美化 常用软件 grub配置

    简介 本文讲对archlinux进行一些基础系统的配置.常用安装的安装,美化进行配置,先看一下美化后的效果吧 配置pacman和使用AUR(archlinuxcn源) archlinux采用滚动更新的 ...

随机推荐

  1. 火山引擎数智平台拆解 APP改版场景中蕴含的数据思维

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 你有没有遇到过,打开一款经常使用的 APP,它却跳出一条需要你升级版本的提示? 大多数情况下,用户可能会直接点击「 ...

  2. Solon2 开发之IoC,十、Bean 在容器的两层信息

    1.剖析 Bean 的装包与注册过程 比如,用配置器装配一个 Bean (本质是装配出一个 BeanWrap,并自动注册到容器): @Configuration public class Config ...

  3. Sublime Text 查找的内容 高亮显示

    1. 默认情况下是方框,看起来不太方便 2. 选中 "同" 然后按 Alt +F3[下方的查询框要出现,没有的话按 Ctrl+F 调出来,否则不会高亮显示] 同时,选中的文字还会填 ...

  4. Flask中本地代理的使用

    本地代理 当请求到来时应用上下文和程序上下文被推入本地栈中,全局变量current_app,request,g,session都可以使用了.以current_app为例,current_app代表的是 ...

  5. Printer Queue,UVa 12100 (自定义标记法 + 优先队列)

    题目描述: 我们需要用打印机打印任务.每个任务都有1~9间的优先级,优先级越高,任务越急. 打印机的运作方式:从打印队列里取出一个任务j,如果队列里有比j更急的任务,则直接把j放到打印队列尾部,否则打 ...

  6. 经典Python案例实现

    入门_30个常用python实现 .pdf 一. 二. 三. 四. 五.函数篇 5.1 计算圆的面积 from math import pi as PI def CircleArea(r): if i ...

  7. L1-046 整除光棍 (20分)

    问题描述 这里所谓的"光棍",并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整除.比如,111111就可 ...

  8. L2-026 小字辈 (25 point(s)) (BFS)

    补题链接:Here 本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) -- 简单起见,我们把家族成员从 1 到 ...

  9. VueTreeselect

    https://www.vue-treeselect.cn/ 官网简介

  10. Redis 缓存与数据库数据不一致问题

    Redis缓存与数据库数据不一致问题是指在使用Redis作为缓存系统时,由于缓存和数据库之间的操作没有同步或处理不当,导致缓存中的数据与数据库中的数据不同步,产生数据不一致的情况. 现象: 数据库更新 ...