Ubuntu Neovim 安装和配置指南

安装不建议使用apt安装,因为apt安装的版本总是不是最新版。一些neovim插件依赖于高版本的neovim,因此使用apt安装可能会导致一些插件无法正常使用。 下面介绍安装最新版neovim的方法。 下载安装压缩包: wget https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz 安装: tar xzvf nvim-linux64.tar.gz cp ./nvim-linux64/bin/nvim /usr/bin/ 测试: nvim -v nvim配置核心配置配置 nvim 需要先创建配置文件的文件夹。 cd ~ mkdir -r .config/nvim cd .config/nvim nvim 使用 lua 语言作为配置文件语言,新建 init.lua,该文件是 nvim 的配置的入口。 touch init.lua 模块化配置nvim 支持模块化配置,所以可以在 nvim 文件夹下创建多个配置模块: mkdir -r lua/core cd lua/core core 文件夹存放 nvim 的核心配置,例如 nvim 基础配置(options.lua)和快捷键配置(keymaps): touch options.lua keymaps.lua 此时,neovim 的配置文件结构如下所示: ~ `--.config `-- nvim |-- init.lua |-- lua | |-- core | | |-- keymaps.lua | | `-- options.lua | `-- plugins | `-- plugins-setup.lua `-- plugin `-- packer_compiled.lua 回到 init.lua 文件,在 init.lua 中调用刚刚新建的两个模块: ...

2024年06月16日 · 1 分钟 · Cassius0924

Ubuntu 配置开机自动挂载三星 T7 固态硬盘指南

连接硬盘先将硬盘与主机相连接,然后运行fdisk命令查看系统的硬盘分区。 sudo fdisk -l 找到自己连接的硬盘,一般为/dev/sda1。 查看硬盘UUID运行命令 sudo blkid 找到自己硬盘的 UUID 和 TYPE,记录下它们。三星 T7 硬盘默认为兼容性较好的 exfat 格式。 配置开机自动挂载接着修改系统/etc/fstab文件。 vim /etc/fstab 在文件最后添加一行: UUID=C65A-E9E1 ~/disk exfat defaults,nofail,utf8,dmask=022,fmask=133 0 0 内容格式为: UUID=<UUID> <挂载目录> <硬盘格式> <挂载参数> <是否自动备份> <开机是否自检> 挂载参数中可以设置: defauls:默认挂载参数; dmask=:目录的默认权限; fmask=:文件的默认权限; uid=:挂载硬盘的用户id; gid=:挂载硬盘的组id; utf8:字符编码; nofail:错误忽略,如果硬盘不存在依然正常开机。 设置完毕后保存并退出文件。 重启 Ubuntusudo reboot 重启后将自动挂载硬盘到指定目录。

2024年06月16日 · 1 分钟 · Cassius0924

VS Code 设置网络代理指南

当你使用 VS Code 时,有时你可能需要配置网络代理来访问特定的网络资源(魔法)。 例如在局域网远程开发时使用 GitHub Copilot Chat 插件并且远程主机无魔法时就可以进行配置网络代理。 配置教程打开设置,搜索 proxy 找到 Http: Proxy,填入代理地址即可。 注意在远程开发时只能设置远程主机的Http代理,无法设置 VS Code 本机的网络代理。

2024年06月16日 · 1 分钟 · Cassius0924

基于 L2CAP 协议的蓝牙 BLE 设备通信指南

蓝牙 BLE 是什么蓝牙BLE,即蓝牙低功耗 (Bluetooth Lower Energy)是一种蓝牙通信标准,设计用于短距离通信和低功耗应用。 相比经典蓝牙,BLE 更加节能,传输距离更远,连接更快。BLE 主要用于健身设备、医疗设备、家居自动化等场景。 蓝牙 BLE 设备的连接信道L2CAP的基本概念是信道(Signaling Channel)。信道是个抽象概念,表示两个设备某个协议层之间的通道。每个信道分配一个2字节的信道ID——CID(Channel ID),每个信道功用不同,比如CID=0x0004的信道表示属性协议(Attribute Protocol)专用信道。对于BLE协议,L2CAP共有三个信道ID: 0x0004 – 属性协议 0x0005 – 低功耗信令信道 0x0006 – 安全管理协议 其他信道则用于经典蓝牙。协议复用可以理解为,不同的协议走不同的信道,互不干扰。 代码#define ATT_CID 4; // 创建 L2CAP socket int s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP); // 绑定 L2CAP socket struct sockaddr_l2 bind_addr = {0}; bind_addr.l2_family = AF_BLUETOOTH; bind_addr.l2_cid = htobs(ATT_CID); // ATT 信道 CID bdaddr_t any_addr = {{0, 0, 0, 0, 0, 0}}; bacpy(&bind_addr.l2_bdaddr, &any_addr); bind_addr.l2_bdaddr_type = BDADDR_LE_PUBLIC; int err = bind(s, (struct sockaddr *)&bind_addr, sizeof(bind_addr)); if (err) { return -1; } // 连接 L2CAP socket struct sockaddr_l2 conn_addr = {0}; conn_addr.l2_family = AF_BLUETOOTH; conn_addr.l2_cid = htobs(ATT_CID); // ATT CID str2ba(mac_address.c_str(), &conn_addr.l2_bdaddr); conn_addr.l2_bdaddr_type = BDADDR_LE_PUBLIC; err = connect(s, (struct sockaddr *)&conn_addr, sizeof(conn_addr)); if (err) { exit(-1); } L2CAP 数据包解析L2CAP(Logical Linked Control and Adaptation Protocol 逻辑链路控制与适配协议)工作在链路层,为上层协议提供数据通道。它支持数据分片与重组,确保数据完整可靠地传输。 ...

2024年06月16日 · 3 分钟 · Cassius0924

通过 frp 内网穿透实现异地 SSH 连接(反向代理)

起因是我放假回家,想在家里通过 SSH 连接放在学校的无显示器的 Linux,但是学校的 Linux 是内网,无法直接连接,且无显示器无法使用向日葵等远程桌面软件,所以想到了使用 frp 的反向代理功能实现内网穿透,进而实现异地 SSH 连接。 前提 一台具有公网 IP 的服务器(阿里云、腾讯云等) 配置远程主机我们需要有三台主机,分别是:自己的电脑、远程 Linux 主机和具有公网 IP 的服务器。 只需要在远程 Linux 和具有公网 IP 的服务器上配置 frp 即可。 首先在远程 Linux 上下载 frp,Github 下载地址。下载远程主机对应的版本,我这里是 ARM64 架构的 Linux,所以下载 frp_0.51.2_linux_arm64.tar.gz。 下载完毕后解压: tar -xvf frp_0.51.2_linux_arm64.tar.gz cd frp_0.51.2_linux_arm64 远程 Linux 为客户端,所以只需要保留 frpc* 文件即可,frps可以删除。 rm frps* 修改frpc.ini,只需要将server_addr修改为服务器的 IP 地址即可,local_ip不变。server_port和remote_port一般不变,若与其他服务冲突了可以修改。 vim frpc.ini #:wq 退出 配置服务器同样下载好对应系统版本的 frp,解压后删除frpc*文件。 rm frpc* 修改frpc.ini,确保bind_port与 frpc 客户端,即远程主机的server_port一致。 再前往阿里云或腾讯云官网配置服务器防火墙规则,开放服务器的 6000 和 7000 端口(若修改了则开放修改后的端口)。 ...

2024年06月16日 · 1 分钟 · Cassius0924

C++ Copy&Swap 惯用法指南

Copy&Swap 是什么Copy&Swap 是一种 C++ 中常用的编程技巧,用于实现类的赋值运算符(operator=)。 实现传统写法先看看未使用 Copy&Swap 的赋值运算符写法: #include <iostream> #include <vector> class OldAClass { private: int _count; std::string _str; std::vector<int> _vec; public: OldAClass() : _count(0), _vec(10) {} // 拷贝构造函数 和 拷贝赋值运算符 OldAClass(OldAClass &a) : _count(a._count), _str(a._str), _vec(a._vec) { std::cout << "Copy constructor called\n"; } OldAClass &operator=(OldAClass &a) { std::cout << "Copy Assignment operator called\n"; if (this != &a) { //判断传入的 a 是否是自己 _count = a._count; _str = a._str; _vec = a._vec; } return *this; } // 移动构造函数 和 移动赋值运算符 OldAClass(OldAClass &&a) noexcept : _count(a._count), _str(std::move(a._str)), _vec(std::move(a._vec)) { std::cout << "Move constructor called\n"; } OldAClass &operator=(OldAClass &&a) noexcept { std::cout << "Move Assignment operator called\n"; if (this != &a) { _count = a._count; _str = std::move(a._str); _vec = std::move(a._vec); } return *this; } }; 可以看到,这种写法需要重复写两次赋值运算符,并且每次都需要判断传入的参数是否是自己,而且代码重复度高。 Copy&Swap 写法class AClass { private: int _count; std::string _str; std::vector<int> _vec; public: AClass() : _count(0), _vec(10) {} static void swap(AClass &a, AClass &b) { std::swap(a._count, b._count); std::swap(a._str, b._str); std::swap(a._vec, b._vec); } // 拷贝构造函数 AClass(AClass &a) : _count(a._count), _str(a._str), _vec(a._vec) { std::cout << "Copy constructor called\n"; } // 移动构造函数 AClass(AClass &&a) noexcept { std::cout << "Move constructor called\n"; swap(*this, a); } // 赋值运算符 AClass &operator=(AClass a) { // 注意这里的参数是值传递,会调用拷贝构造函数 std::cout << "Assignment operator called\n"; swap(*this, a); return *this; } }; 这种写法只需要写一次赋值运算符,代码更简洁,而且不需要判断传入的参数是否是自己。 ...

2024年01月15日 · 2 分钟

Unity 脚本使用 NuGet 安装解决方案包

本文旨在教大家如何在 Unity 中使用 NuGet 安装解决方案包。 Visual Studio 集成了 NuGet 管理器,可以方便的安装和卸载解决方案包。但在使用 Viusal Studio 开发 Unity C# 脚本时,不能直接在内置的 NuGet 管理器安装解决方案包。因为 Unity 工程打开或运行时会刷新工程文件,导致我们在 Visual Studio 内置 NuGet 管理器安装的解决方案包失效。所以 Unity 使用 NuGet 安装解决方案包需要特殊步骤。 步骤下载解决方案包在NuGet官网下载你需要解决方案包,例如Google.Protobuf。 直接下载会下载最新预览版,稳定版需要点击右上角的 Full stats,查看所有版本。 找到稳定版 3.22.4,点击即可下载。 解压包下载后会得到拓展名为.nupkg的文件,先将文件拓展名改为.zip,接着解压即可。 导入dll文件解压后可以得到 dll 文件,位于 google.protobuf.3.22.4/lib/**/Google.Protobuf.dll ,将dll文件复制到 Unity 工程文件夹的 Assets/Plugins 文件夹下,若没有这个文件夹自己手动新建一个。 配置Unity项目接着需要将 Unity 项目的 Api Compatibility Level 更改为与 dll 文件对应的版本。打开 Unity 的 Project Settings,找到 Player > Other Settings > Api Compatibility Level。 ...

2023年06月01日 · 1 分钟 · Cassius0924

Linux 命令行网络连接指南

本文旨在为 Linux 用户介绍提供关于使用命令行连接网络的方法。 本文将详细介绍利用 nmcli 工具连接 Wi-Fi 和以太网的教程,包括查看连接状态、控制 Wi-Fi、控制以太网等等。 安装 nmclinmcli 是 NetworkManager 的命令行工具,它可以用于管理和配置网络连接。如果你的 Linux 系统上没有安装 nmcli,请使用以下命令进行安装: sudo apt-get install network-manager 查看连接状态在连接网络之前,我们需要先查看网络状态。使用以下命令可以查看当前网络状态: nmcli general status 以上命令可以简写为: nmcli g # g 表示 general,默认为 status STATE:这是 NetworkManager 的当前状态。它可以是 “connected”、“connecting”、“disconnected”、“disconnecting” 或 “asleep” 等。 Connectd Connecting Disconnected Disconnecting Asleep 已连接 连接中 未连接 断连中 休眠 CONNECTIVITY:这是系统的网络连接状态。它可以是 “full”、“limited” 、“Portal” 或 “none”。 Full Limited Portal None 已联网,可上网 已联网,但不可上网 已联网,但需要认证 未联网 WIFI-HW:这是 WiFi 硬件的状态。它可以是 “enabled” 或 “disabled”。 ...

2023年04月14日 · 2 分钟 · Cassius0924

MacOS 修改 App Store 和地图软件语言指南

在 macOS 系统设置中,我们可以轻松地设置软件的语言,但有些应用程序如 App Store 和 Maps 却无法直接在设置中修改语言。这可能会让我们在使用这些应用程序时感到困惑,尤其是当我们需要使用不同语言的应用程序时。 本文提供了一种简单的方法,让您能够修改 App Store 和 Maps 的语言设置,以便在需要时更轻松地使用这些应用程序。 修改方法修改苹果地图的语言为简体中文: sudo defaults write com.apple.Maps AppleLanguages '("zh-CN")' 修改 App Store 的语言为美式英语: sudo defaults write com.apple.AppStore AppleLanguages '("en-US")' 其他软件其他软件均可在系统设置里直接设置。 其他语言同理,其他语言只需修改命令最后的**「语言区域码」**即可。 语言名称 代码 中文(简体) zh-CN 中文(繁体) zh-TW 英语(美国) en-US 英语(英国) en-GB 日语 ja 法语 fr 德语 de 西班牙语 es 韩语 ko 俄语 ru 葡萄牙语(巴西) pt-BR 阿拉伯语 ar 意大利语 it 土耳其语 tr 印地语 hi 印尼语 id 荷兰语 nl 波兰语 pl 瑞典语 sv 丹麦语 da 芬兰语 fi 挪威语 no 希腊语 el

2023年04月14日 · 1 分钟 · Cassius0924

在 Chrome 中解锁 New Bing(Bing AI)

本文旨在帮助大家在 Chrome 中使用 New Bing(Bing AI)。 前几周,New Bing 的申请已经全面开放,无需等待,直接即可通过申请。但微软限制了 New Bing 只能在自家的 Edge 浏览器使用,对于我这种万年 Chrome 玩家就很苦恼,不习惯 Edge。 前提 你得能科学上网; 你已经通过 New Bing 的申请。 步骤没什么步骤,安装个 Chrome 插件即可。 安装 Bing Unchained 插件安装插件 Unchained 。 然后刷新一下Bing.com即可。

2023年04月08日 · 1 分钟 · Cassius0924