从零开始配置vim(19)——终端配置
在上一篇文章中,我们熟悉了终端模式,并且配置了终端模式的一些操作。但是它总是有那么一点不符合我们的使用习惯。这篇我们将通过强大的插件来完善终端操作的体验。
在介绍插件之前让我们先回退到上一个版本,我们把上一篇文章中的配置全部从配置文件中剔除。先别着急喷我把各位小伙伴带到沟里去了,动态的调整自己的配置是常有的事,例如我发现了某些好用的插件、某些自己的配置可以淘汰一些插件又或者改变操作习惯等等原因都会导致我们修改配置。所以还是事先习惯的好。
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 配置打开新终端后自动进入插入模式,这样就不需要使用自动命令自己干这个事情了。
另外我这里仍然采用它默认的打开方式,默认在下方打开一个新终端,根据个人习惯可以改为弹出式窗口。根据官方文档,还支持 vertical、float、tab。相信各位小伙伴从名字上就能知道它们分别代表何种样式。

在之前介绍终端的时候说过,可以使用 <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 命令或者 python、node 等的交互式窗口。
这里我们以 python 和 htop 为例来介绍如何自定义这些自己的终端窗口。
为了自定义自己的终端我们需要先获取到 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)——终端配置的更多相关文章
- 简单快捷好用的vim配置和终端配置推荐
vim 配置实用spf13-vim,安装方便简单快捷,极力推荐. 另外oh-my-zsh 终端配置很好,与之搭配使用效果更佳. 安装都很简单,一个脚本搞定, 都是在gitHub上开源的,自行搜索,这里 ...
- 程序员的 Ubuntu 19.10 配置与优化指南
原文地址:程序员的 Ubuntu 19.10 配置与优化指南 0x00 环境 CPU: Intel Core i9-9900k GPU: GeForce RTX 2070 SUPER RAM: DDR ...
- Mac下终端配置(item2 + oh-my-zsh + solarized配色方案)
最近重装了系统,于是便重新配置了一下终端,使其更符合用户习惯. 效果如下: 拥有语法高亮,命令行tab补全,自动提示符,显示Git仓库状态等功能. 安装 首先我们下载的 iTem2 这个软件,比Mac ...
- Mac 下升级 vim 并自己配置 vim 的过程
1.升级 vim 我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim -- ...
- linux 配置vim(vimrc)
打开终端:ctrl+alt+t 进入vim文件:cd /etc/vim 打开vimrc文件:sudo gedit vimrc 然后在行末if语句前加上下面的内容," 这个符号为注释,后面内 ...
- Mac终端配置,DIY你的Terminal (iTerm 2 + Oh My Zsh)
使用mac osx一年以来,自带的Terminal终端一直都是白底黑字,食之无味,越来越缺乏新鲜感,怎么也得想个法子来刺激下眼球. 不然花那么多大洋买你回来是要哪般,难道真是为来学习工作??? 怎么可 ...
- vim的简单配置
本文大部分内容转载自:https://blog.csdn.net/lhy2932226314/article/details/69668891 vim是从 vi 发展出来的一个文本编辑器.功能丰富,在 ...
- Centos下Vim编辑器基本配置
设置 Vim编辑环境 配置 有两种方式: 1,是在/etc/vimrc 进行设置,这种设置方法会作用与所有登录到Linux环境下的用户.不建议使用. 2,在用户登录的 ~ 目录下创建一个 .vimrc ...
- 解决配置vim中文乱码的问题
解决linux下vim乱码的情况:(修改vimrc的内容) 全局的情况下:即所有用户都能用这个配置 文件地址:/etc/vimrc 在文件中添加: set fileencodings=utf-8,uc ...
- archlinux 源配置 桌面美化 终端美化 常用软件 grub配置
简介 本文讲对archlinux进行一些基础系统的配置.常用安装的安装,美化进行配置,先看一下美化后的效果吧 配置pacman和使用AUR(archlinuxcn源) archlinux采用滚动更新的 ...
随机推荐
- PPT 图片框架排版万能能公式
图片作用 提升设计感 辅助表达 传递情感 如何选择一张高大上的图片? 星空.地球.城市.海洋.线条.粒子.山脉.壁纸(系统.手机厂商千挑万选的) https://cn.bing.com/images ...
- Spring Boot JWT 用户认证
JWT token验证后,通过 ThreadLocal 进行传值 https://jwt.io/#debugger 官网提供的 JAVA 工具还是挺多的,选了个 Star 比较多的 https://g ...
- 32. 干货系列从零用Rust编写正反向代理,关于堆和栈以及如何解决stack overflow
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...
- 【论文笔记#1】SPGAN-DA:用于领域自适应遥感图像语义分割的语义保留生成对抗网络
作者: Yansheng Li 发表年代: 2023 使用的方法: 无监督领域自适应(UDA).GAN.ClassMix.边界增强 来源: IEEE TGRS 方向: 语义分割 期刊层次: CCF B ...
- #2069:Coin Change(完全背包)
Problem Description Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cen ...
- C++ 的两种换行符区别
当我们在C++执行一个输出语句时,在输出语句最后可以使用 std::endl 或 \n 建立一个新行. 但这两种换行方式对程序有不同的影响. std::endl 它在建立一个新的行的同时,还会自动刷新 ...
- C++ tuple(STL tuple)模板用法详解
tuple 是C++ 11新引进的 build-in structure,但其实在其他语言中tuple的使用已经行之有年(e.g. Javascript和Python中都有tuple).C++ 11中 ...
- 玩转 Helm
0. 前言 在 kubernetes 的系列文章中,我们介绍了 kubernetes 的种种概念,特性.不过对于如何部署并没有介绍,想象下如果 kubernetes 中 pod 的数量达到成百,上千, ...
- idea 中添加查看字节码工具
本文为博主原创,未经允许不得转载: jdk 的 bin 目录下存在 javap.exe 的工具,可通过 以下命令查看编译的字节码文件: javap -c Test.class 在 idea 中添加查看 ...
- 【面试题精讲】JVM中有哪些垃圾收集器
有时博客内容会有变动,首发博客是最新的,其他博客地址可能未同步,请认准https://blog.zysicyj.top 首发博客地址 系列文章地址 在Java虚拟机(JVM)中,有以下几种常见的垃圾收 ...