clang 格式在 gVim 下不工作

clang-format not working under gVim

我通过 apt-get 安装了 clang-format-3.8。 现在我尝试在 gVim 中使用它,但它不起作用。 我检查过文件夹 /usr/share/vim/addons/syntax.

中存在 clang-format-3.8

但是当我在 vim 命令行中输入 :pyf /usr/share/vim/addons/syntax/clang-format-3.8.py 时,它 returns:

E319: Sorry, the command is not available in this version

我在 Ubuntu 16.04.

下使用 gVim 7.4

Ubuntu 16.04 附带的 Vim 二进制文件是用 Python 编译的 3. clang-format 的 vim 插件是由 Python 编写的 2 .

您需要:

  • 通过 Python 3
  • 编写您自己的插件
  • 用Python2编译你自己的vim,这是最简单的方法

可以通过 Google 找到使用 Python 构建 vim 的说明。

Dahn 的回答是正确的,Ubuntu 16.04 附带的 Vim 二进制文件是用 Python 3 而不是 Python 2 编译的。clang-format-3.8.py Ubuntu 16.04 clang-format-3.8 包中的脚本与 Python 3.

不兼容

但最新的 clang-format.py 可以与 Python 一起使用 3. 您可以在这里获取:

https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format.py

我认为这只是在 print 语句两边加上括号的问题。

将此文件保存在您计算机上的某个位置,例如 /usr/local/share/vim/addons/syntax/

此脚本使用 clang-format 作为二进制名称,因此您需要安装 clang-format 软件包,它将 clang-format 命令安装为指向 [=11= 的符号链接].

由于 Vim 现在正在加载 Python 3 脚本,请将 :pyf(不可用)命令替换为 :py3f:

:py3f /usr/local/share/vim/addons/syntax/clang-format.py

我使用 bashvim 命令的组合以不同的方式解决了这个问题。

首先,我安装了 clang-format

# apt-get install clang-format-3.5

(我选择的是3.5版本,你可以选择其他版本)

其次,测试clang-format是否有效

$ clang-format-3.5 -style=Google  test.cpp

然后,运行 vim

$ vim test.cpp

vim 允许 运行 一个外部命令并将它的输出打印到当前缓冲区

:r ! clang-format-3.5 -style=Google  %

(有关外部命令的更多详细信息,请参见 vim https://www.linux.com/learn/vim-tips-working-external-commands

这会将 clang-format 的输出附加到当前缓冲区。要替换当前缓冲区,这是理想的效果,请指定要输出到

中的行
:%! clang-format-3.5 -style=Google  %

(第一个%表示当前文件中的所有行)

您可以通过在 vim(使用 command)中为可视化和命令行模式定义新命令来提高此过程的效率。

除了上述答案之外,我还要做一些事情。我下载了一个新的 python 文件,并将 clang python 文件中推荐的键映射更改为我的 .vimrc 中的以下内容:

    map <C-I> :py3file <path-to-this-file>/clang-format.py<cr>
    imap <C-I> <c-o>:py3file <path-to-this-file>/clang-format.py<cr>

这解决了我遇到的 E319 问题。