【问题标题】:clang-format not working under gVimclang-format 在 gVim 下不起作用
【发布时间】:2016-09-14 12:08:46
【问题描述】:

我通过 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 时,它会返回:

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

我在 Ubuntu 16.04 下使用 gVim 7.4。

【问题讨论】:

  • Ubuntu 中的 Vim 是使用 Python 3 而不是 Python 2 编译的。您需要使用 Python 2 编译自己的 vim 才能使该插件正常工作
  • s/:pyf/:py3f/ 为我工作

标签: c++ vim clang clang-format


【解决方案1】:

Dahn 的回答是正确的,Ubuntu 16.04 附带的 Vim 二进制文件是使用 Python 3 而不是 Python 2 编译的。Ubuntu 16.04 clang-format-3.8 包中的 clang-format-3.8.py 脚本与 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 命令安装为clang-format-3.8 的符号链接。

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

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

【讨论】:

  • 感谢您的回答。我通过 apt-get 安装了clang-format。它在我选择的路径中创建了一个clang-format.py 文件:/usr/share/vim/addons/syntax。我用链接中的那个覆盖了它,并在 gvim 上用:pyf3 /usr/share/vim/addons/syntax/clang-format.py 尝试了它。它没有用,并给了我消息Not an editor command ...。我做错了什么?
  • 我的错误。它应该是:py3f,而不是:pyf3。编辑我的答案以反映这一点。
  • 另外,请小心决定在/usr 之外的/usr/local 之外保存/安装任何内容:linuxfromscratch.org/blfs/view/svn/introduction/position.html 如果您将其保存在/usr 之外的/usr/local 中,那么您新下载的clang-format.py 可能会在您升级时被发行版覆盖。
  • clang-format-4.0 似乎附带了一个 python 3 版本的 clang-format.py,所以我用于绑定 control+k 来格式化行的 vim 配置就像 map <C-K> :py3f /usr/share/clang/clang-format-4.0/clang-format.py<cr>
【解决方案2】:

Ubuntu 16.04 附带的 Vim 二进制文件是用 Python 3 编译的。clang 格式的 vim 插件是用 Python 2 编写的。

您需要:

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

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

【讨论】:

  • 我希望我不是唯一遇到这个问题的人,因为我不想用 py2 编译(我很确定这会与其他插件产生新的冲突),有吗Python 3 的任何插件?我找不到任何有效的方法
  • 先检查你的 vimrc。就我而言,切换到 Python 2 时没有冲突。不幸的是,afaik,还没有可用的插件。自己做
【解决方案3】:

除了上述答案之外,我还必须做一些其他事情。我下载了一个新的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 问题。

【讨论】:

    【解决方案4】:

    我使用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)来提高此过程的效率。

    【讨论】:

      猜你喜欢
      • 2020-06-09
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多