惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
M
MIT News - Artificial intelligence
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
F
Fortinet All Blogs
L
LangChain Blog
D
Docker
G
Google Developers Blog
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
Vercel News
Vercel News
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
Recorded Future
Recorded Future
I
InfoQ
博客园 - 【当耐特】
The Cloudflare Blog
P
Proofpoint News Feed
GbyAI
GbyAI
博客园 - 司徒正美
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Jina AI
Jina AI
量子位
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
有赞技术团队
有赞技术团队
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
大猫的无限游戏
大猫的无限游戏
F
Full Disclosure
雷峰网
雷峰网
美团技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题

方寸之間

修复 Arch Linux 的内核缺失问题 - 方寸之間 树莓派配置旁路由过程记录 - 方寸之間 Cloudflare Tunnel 不完全上手指南 - 方寸之間 解除 New Bing 地区和浏览器限制的方法 - 方寸之間 FRP 上手教程 - 方寸之間 深入理解 Linux nohup 命令 - 方寸之間 C++智能指针是什么 - 方寸之間 PGP 工作原理详解 - 方寸之間 如何恢复 Windows EFI 分区 - 方寸之間 Scaleway IPV6 server 申请及使用攻略 - 方寸之間 Arch Linux 升级系统提示签名无效 - 方寸之間 Arch Linux 音响有杂音的解决办法 - 方寸之間 Arch Linux 如何切换内核 - 方寸之間 Django 项目时区更改错误的解决方案 - 方寸之間 超简单的 Arch Linux + Windows 双启动教程 - 方寸之間 使用 UFW 配置 Linux 防火墙 - 方寸之間 Git 中的一个特殊 hash - 方寸之間 深入理解数据库事务 - 方寸之間 CRLF 和 LF 之间的区别与联系 - 方寸之間 DNS 的更新是如何工作的? - 方寸之間 浅析 Linux 的 cron 命令 - 方寸之間 如何快速查看 github 代码库中早期 commits - 方寸之間 黑科技:使用 GitHub 搭建自己的短链接服务 - 方寸之間 Build site with Franklin.jl - 方寸之間 iwd 的使用教程 - 方寸之間 超好用的 UML 工具推荐 - 方寸之間 ArchLinux 安装配置笔记 (Updated) - 方寸之間 如何将 Julia 添加到 Jupyter Notebook - 方寸之間 费曼技巧:最好的学习方式 - 方寸之間 How to Create Linux Desktop Entry - 方寸之間 Make a TODO robot with Github Actions - 方寸之間 C++继承 多态 虚函数 - 方寸之間 C++ inline 关键字详解 - 方寸之間 C++ Static 关键字详解 - 方寸之間 C++ type conversion notes - 方寸之間 Solution for _CRT_SECURE_NO_WARNINGS error - 方寸之間 IR Homework - 方寸之間 Customize Ubuntu themes, icons and Shell - 方寸之間 恢复右键菜单的新建命令 - 方寸之間 Hugo+Github 搭建个人博客 - 方寸之間
安装定制化 Vim - 方寸之間
Mercas · 2023-08-10 · via 方寸之間

为了使用带有剪切板功能的 Vim,我尝试了很多方法,最后发现,还是源码构建最好用

以前在使用 Vim 编写代码的时候就发现,Vim yank 的内容无法直接进入系统剪切板,稍微 Google 了以下发现好像需要使用第三方软件(Linux 上的 xclip 或者 MacOS 上的 pbcopy),懒得折腾,就新开一个 Terminal,然后 cat 出来文件内容,拷贝需要的内容然后使用(没想到吧;D)。

最近在折腾 Vim 环境的时候,又发现了这个问题,这下不能忍了,所以索性找找有没有简单的解决方法。最后勉强找到了几个我认为比较简单的解决方法。

0. 确认是否带有剪切板特性#

vim --version | grep clipboard

如果输出+clipboard代表有剪切板特性,恭喜你,可以直接下拉进入文末;如果出现-clipboard则说明没有,那你可以接着往下看。

1. 使用 gvim#

直接安装 gvim,带有命令行版本的 Vim 是支持剪切板特性的。

2. 使用 Arch Linux 社区的第三方源仓库#

鲁迅曾说:遇事不决,上 Arch wiki。

官方 wiki 的 Vim 界面提到了一个 Unofficial Repository herecura,这是一个个人维护的源仓库,里面是一些个人编译的 Linux 软件。

将以下内容加入/etc/pacman.conf

[herecura]

Server = https://repo.herecura.eu/$repo/$arch

然后安装vim-cli

sudo pacman -Syu

sudo pacman -S vim-cli

3. AUR 安装#

  • 如果你对 AUR 了解比较多,可以尝试自己构建 PKGBUILD 文件。

  • 如果不了解也没关系,我们可以直接找现成的。可以选择直接修改 Arch Linux 官方的 PKGBUILD,在这基础上加入 clipboard 功能支持。

i. 克隆官方的 Vim 包构建仓库:

git clone https://gitlab.archlinux.org/archlinux/packaging/packages/vim.git

ii. 修改PKGBUILD文件,修改--with-xyes,为了节省时间,可以去掉 gvim 的构建。

点击这里查看修改后的`PKGBUILD`内容

pkgbase=vim

pkgname=('vim' 'vim-runtime')

pkgver=9.0.1678

_versiondir=90

pkgrel=1

pkgdesc='Vi Improved, a highly configurable, improved version of the vi text editor'

url='https://www.vim.org'

arch=('x86_64' 'x86_64_v3')

license=('custom:vim')

makedepends=('glibc' 'libgcrypt' 'gpm' 'python' 'ruby' 'libxt' 'gtk3' 'lua'

'gawk' 'tcl' 'zlib' 'libcanberra')

source=(https://github.com/vim/vim/archive/v${pkgver}/${pkgbase}-${pkgver}.tar.gz fix-perl-build.patch

vimrc

archlinux.vim

vimdoc.hook)

sha256sums=('e0b52a997b4f6180c5d8a5dae717075d99650c3e2e7761d1878a3dd7011ec315'

'f79c2afd26bbe0b21375293203d8f0e8dad2424146014ceafc4e8eca6ecf7d39'

'b16e85e457397ab2043a7ee0a3c84307c6b4eac157fd0b721694761f25b3ed5b'

'cc3d931129854c298eb22e993ec14c2ad86cc1e70a08a64496f5e06559289972'

'8e9656934d9d7793063230d15a689e10455e6db9b9fe73afa0f294792795d8ae')

sha512sums=('c5ffb7ca56ff4eee70f06599dd84db2eb28ddadac229d4f7faf01174805923636a4ce61486bdf5a47910c929613dc9b9290dfc9288006222b4bc4ac891548bb8'

'184dd232db5b4a346e9751e58ad0a9b2f60d50d1a2aa2050415d288445606d80c239745f0d8987ff822d2acf6826104a81f8e59c8f1785095d1f319c0fe4abf0'

'4b5bed0813f22af9e158ea9aa56a4a9862dd786ba2d201f20159ccf652da6190164aaed0b6b7217d578f7b25c33a8adcc307bfcf3caa8d173a7ff29e2a00fee7'

'fe091d289d876f45319c898f6021ef86d6a238b540c225a279c46efc5c36fa7d868cd0cee73a111811c4be90df160f85340bb251be3a437727dbe5c699950363'

'a02ad0d66f300160911aeb81d8886c6c558436ac4ee3fcd161dd65c6b1e5d1f41b9005a7f5bb5ba68d57027fc1c8e43daabf055bd6207fb5a216a67f758df8d1')

prepare() {

(cd vim-${pkgver}/src

patch -Np2 -i ../../fix-perl-build.patch

# define the place for the global (g)vimrc file (set to /etc/vimrc)

sed -E 's|^.*(#define SYS_.*VIMRC_FILE.*").*$|\1|g' -i feature.h

sed -E 's|^.*(#define VIMRC_FILE.*").*$|\1|g' -i feature.h

autoconf

)

cp -a vim-${pkgver} gvim-${pkgver}

}

build() {

echo "Building vim..."

(cd vim-${pkgver}

./configure \

--prefix=/usr \

--localstatedir=/var/lib/vim \

--with-features=huge \

--with-compiledby='Arch Linux' \

--enable-gpm \

--enable-acl \

--with-x=yes \ # 这里改为 yes

--disable-gui \

--enable-multibyte \

--enable-cscope \

--enable-netbeans \

--enable-perlinterp=dynamic \

--enable-python3interp=dynamic \

--enable-rubyinterp=dynamic \

--enable-luainterp=dynamic \

--enable-tclinterp=dynamic \

--disable-canberra

make

)

}

check() {

cd vim-${pkgver}

TERM=xterm make -j1 test

}

package_vim-runtime() {

pkgdesc+=' (shared runtime)'

optdepends=('sh: support for some tools and macros'

'python: demoserver example tool'

'gawk: mve tools upport')

backup=('etc/vimrc')

cd vim-${pkgver}

make -j1 VIMRCLOC=/etc DESTDIR="${pkgdir}" install

# man and bin files belong to 'vim'

rm -r "${pkgdir}"/usr/share/man/ "${pkgdir}"/usr/bin/

# Don't forget logtalk.dict

install -Dm 644 runtime/ftplugin/logtalk.dict \

"${pkgdir}"/usr/share/vim/vim${_versiondir}/ftplugin/logtalk.dict

# rc files

install -Dm 644 "${srcdir}"/vimrc "${pkgdir}"/etc/vimrc

install -Dm 644 "${srcdir}"/archlinux.vim \

"${pkgdir}"/usr/share/vim/vimfiles/archlinux.vim

# no desktop files and icons

rm -r "${pkgdir}"/usr/share/{applications,icons}

# license

install -dm 755 "${pkgdir}"/usr/share/licenses/vim-runtime

ln -s /usr/share/vim/vim${_versiondir}/doc/uganda.txt \

"${pkgdir}"/usr/share/licenses/vim-runtime/license.txt

# pacman hook for documentation helptags

install -Dm 644 "${srcdir}"/vimdoc.hook "${pkgdir}"/usr/share/libalpm/hooks/vimdoc.hook

}

package_vim() {

# TODO: move perl back into optdeps after --enable-perlinterp=dynamic

# starts working again (https://github.com/vim/vim/issues/10512)

depends=("vim-runtime=${pkgver}-${pkgrel}" 'gpm' 'acl' 'glibc' 'libgcrypt' 'zlib' 'perl')

optdepends=('python: Python language support'

'ruby: Ruby language support'

'lua: Lua language support'

#'perl: Perl language support'

'tcl: Tcl language support')

conflicts=('gvim' 'vim-minimal')

provides=('xxd' 'vim-minimal' 'vim-plugin-runtime')

replaces=('vim-minimal')

cd vim-${pkgver}

make -j1 VIMRCLOC=/etc DESTDIR="${pkgdir}" install

# provided by (n)vi in core

rm "${pkgdir}"/usr/bin/{ex,view}

# delete some manpages

find "${pkgdir}"/usr/share/man -type d -name 'man1' 2>/dev/null | \

while read _mandir; do

cd "${_mandir}"

rm -f ex.1 view.1 # provided by (n)vi

rm -f evim.1 # this does not make sense if we have no GUI

done

# Runtime provided by runtime package

rm -r "${pkgdir}"/usr/share/vim

# remove gvim.desktop as not included

rm "${pkgdir}"/usr/share/applications/gvim.desktop

# license

install -Dm 644 runtime/doc/uganda.txt \

"${pkgdir}"/usr/share/licenses/${pkgname}/license.txt

}

# vim: ts=2 sw=2 et:

iii. 构建并安装:

4. 源码安装#

  1. 安装依赖

sudo pacman -S glibc libgcrypt gpm python ruby libxt gtk3 lua gawk tcl zlib gettext pkgconfig

# 需要音频支持的,安装这个依赖

sudo pacman -S libcanberra

  1. 克隆源码

git clone https://github.com/vim/vim.git

  1. 配置

./configure --prefix=/usr --localstatedir=/var/lib/vim \

--with-features=huge --enable-gpm --enable-acl --with-x=yes \

--disable-gui --enable-multibyte --enable-cscope \

--disable-netbeans --enable-perlinterp=dynamic \

--enable-python3interp=dynamic --enable-rubyinterp=dynamic \

--enable-luainterp=dynamic --mandir=/usr/share/man

#################### 需要音频支持的加入以下配置:

--enable--canberra

  1. 编译生成

# 默认生成

make

# 测试

make test

# 添加额外配置

make reconfig

# 测试

make test

# 安装

sudo make install

5. 测试#

查看 patch 版本及是否包含 clipboard 特性

$ vim --version | grep patch

Included patches: 1-1683

$ vim --version | grep clipboard

+clipboard +keymap +printer +vertsplit

+eval -mouse_jsbterm -sun_workshop +xterm_clipboard

6. 参考链接#

https://github.com/vim/vim

https://github.com/ycm-core/YouCompleteMe/wiki/Building-Vim-from-source

https://gitlab.archlinux.org/archlinux/packaging/packages/vim/-/blob/main/PKGBUILD