Vim/zh: Difference between revisions

Ardenet (talk | contribs)
Created page with "==== 应用自定义 vimrc 配置 ===="
Ardenet (talk | contribs)
Created page with "对于 C/C++ 来说,比 youcompleteme 更好的替代方案是使用 [https://github.com/cquery-project/cquery/ cquery] 并结合 [https://github.com/autozimu/LanguageClient-neovim LanguageClient-neovim]。如果您从 nixpkgs 安装 cquery,它在 nix-shell 中使用时也能找到 C 头文件,因为它使用了一个自定义的 [https://github.com/NixOS/nixpkgs/commit/04f3b76dcec21f2fcba6b1b0afbb3ed224165050#diff-11cdfc0385b9e017089c1ac09c5b838e shell 包装器]。"
 
(25 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
<div lang="en" dir="ltr" class="mw-content-ltr">
[https://www.vim.org/ Vim](vi 增强版)是一个高度可配置的终端模态文本编辑器。    
[https://www.vim.org/ Vim] (vi improved) is a highly configurable modal text editor program for the terminal.
</div>    


<span id="Installation"></span>
<span id="Installation"></span>
Line 44: Line 42:
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
有关所有选项,请参阅 [https://github.com/rycee/home-manager/blob/master/modules/programs/vim.nix]
See [https://github.com/rycee/home-manager/blob/master/modules/programs/vim.nix] for the full set of options.
</div>


<span id="Vim_Spell_Files"></span>
<span id="Vim_Spell_Files"></span>
Line 86: Line 82:
==== NeoVim 配置带有 Python 支持的 Coc ====
==== NeoVim 配置带有 Python 支持的 Coc ====


<div lang="en" dir="ltr" class="mw-content-ltr">
对于 NeoVim,请使用以下 home-manager 配置:
For NeoVim use this home manager config:
https://github.com/NixOS/nixpkgs/issues/98166#issuecomment-725319238
https://github.com/NixOS/nixpkgs/issues/98166#issuecomment-725319238
</div>


<span id="System_wide_vim/nvim_configuration"></span>
<span id="System_wide_vim/nvim_configuration"></span>
Line 96: Line 90:
如果您想要一个 vim/nvim 的系统范围“基本”配置,这里有两个示例:
如果您想要一个 vim/nvim 的系统范围“基本”配置,这里有两个示例:


<div lang="en" dir="ltr" class="mw-content-ltr">
unstable 分支:
On unstable:
</div>


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
Line 162: Line 154:
== 不使用 Home Manager 的自定义设置 ==
== 不使用 Home Manager 的自定义设置 ==


<div lang="en" dir="ltr" class="mw-content-ltr">
{{note|要了解如何在 Nix 系统中设置 Vim 的总体概述,请参阅 [https://www.mpscholten.de/nixos/2016/04/11/setting-up-vim-on-nixos.html mpscholten的博客]}}
{{note|To get a general overview about how to set up your vim in nix, refer to [https://www.mpscholten.de/nixos/2016/04/11/setting-up-vim-on-nixos.html mpscholten's blog] }}
</div>


Vim 插件可以通过 nix 安装。您可以不使用 vim 插件管理器,直接在 <code>.nixpkgs/config</code> 中完成所有操作。
Vim 插件可以通过 nix 安装。您可以不使用 vim 插件管理器,直接在 <code>.nixpkgs/config</code> 中完成所有操作。


<div lang="en" dir="ltr" class="mw-content-ltr">
在 nix 中对 vim 进行包管理和配置的大部分文档存储在 nixpkgs 的 [https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md] 中。
A lot of documentation about package management and configuration of vim in nix is stored at [https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/vim-utils.nix] in nixpkgs.
</div>


<span id="Customizations"></span>
<span id="Customizations"></span>
Line 210: Line 198:
==== 应用自定义 vimrc 配置 ====
==== 应用自定义 vimrc 配置 ====


<div lang="en" dir="ltr" class="mw-content-ltr">
注意:您必须使用 <code>vimrcConfig.customRC</code> 而不是手动安装 <code>~/.vimrc</code>,因为自定义 Vim 会默认忽略您主目录中的任何 vimrc 文件。
NB: you ''must'' use <code>vimrcConfig.customRC</code> rather than installing a <code>~/.vimrc</code> by hand, since the customized Vim will silently ignore any vimrc in your home directory.
</div>


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
vim-full.customize {
vim-full.customize {
   name = "vim-with-plugins";
   name = "vim-with-plugins";
   <div lang="en" dir="ltr" class="mw-content-ltr">
   # 添加自定义的 .vimrc 行,例如:
# add custom .vimrc lines like this:
</div>
   vimrcConfig.customRC = ''
   vimrcConfig.customRC = ''
     set hidden
     set hidden
Line 227: Line 211:
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
如果您需要在添加插件之前运行代码,可以使用 <code>vimrcConfig.beforePlugins</code>(如果您要覆盖 [https://github.com/NixOS/nixpkgs/blob/c3df8057dad986bf7f3928de1b5233fadb52bb15/pkgs/misc/vim-plugins/vim-utils.nix#L264-L267 默认值],请务必包含 <code>set nocompatible</code>)。
If you need to run code before plugins are added, you can use <code>vimrcConfig.beforePlugins</code> (be sure to include <code>set nocompatible</code> if you override [https://github.com/NixOS/nixpkgs/blob/c3df8057dad986bf7f3928de1b5233fadb52bb15/pkgs/misc/vim-plugins/vim-utils.nix#L264-L267 the default value]).
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Using_vim&#039;s_builtin_packaging_capability"></span>
=== Using vim's builtin packaging capability ===
=== 使用 vim 的内置打包功能 ===
</div>


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
vim-full.customize {
vim-full.customize {
   vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
   vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
     <div lang="en" dir="ltr" class="mw-content-ltr">
     # 启动时加载
# loaded on launch
</div>
     start = [ YouCompleteMe fugitive ];
     start = [ YouCompleteMe fugitive ];
     <div lang="en" dir="ltr" class="mw-content-ltr">
     # 可通过调用 `:packadd $plugin-name` 手动加载
# manually loadable by calling `:packadd $plugin-name`
</div>
     opt = [ phpCompletion elm-vim ];
     opt = [ phpCompletion elm-vim ];
     <div lang="en" dir="ltr" class="mw-content-ltr">
     # 要在打开文件类型时自动加载插件,请添加如下 vimrc 行:
# To automatically load a plugin when opening a filetype, add vimrc lines like:
</div>
     # autocmd FileType php :packadd phpCompletion
     # autocmd FileType php :packadd phpCompletion
   }
   }
Line 254: Line 229:
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
请注意,使用 opt 动态加载可能存在错误,解决方法是改用 [https://vi.stackexchange.com/a/20818/30821 start]
Note that dynamically loading with opt may be buggy and the workaround is to use [https://vi.stackexchange.com/a/20818/30821 start instead].
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Using_Pathogen_as_manager"></span>
=== Using Pathogen as manager ===
=== 使用 Pathogen 作为管理器 ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
pathogen 的另一实现,原有插件启动速度较慢,而 [VAM] 具有更多功能。
There is a pathogen implementation as well, but its startup is slower and [VAM] has more features.
</div>


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
Line 271: Line 241:
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Using_Vim-Plug_as_manager"></span>
=== Using Vim-Plug as manager ===
=== 使用 Vim-Plug 作为管理器 ===
</div>


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
Line 279: Line 248:
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Adding_new_plugins"></span>
=== Adding new plugins ===
=== 添加新插件 ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
请参阅 https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md
Please see https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Notes_Regarding_Plugins"></span>
==== Notes Regarding Plugins ====
==== 关于插件的说明 ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
如需更多信息,您可以查看 [https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md nixpkgs 存储库上的文档]
For additional info, you may wish to look at [https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md documentation on the nixpkgs repository].
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Add_a_new_custom_plugin_to_the_users_packages"></span>
=== Add a new custom plugin to the users packages  ===
=== 向用户包添加一个新的自定义插件 ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
有时您不想修改上游插件,为此您可以使用 <code>vimUtils.buildVimPlugin</code> 创建自己的插件:
Sometimes you do not want to change upstream plugins, for this you can use  <code>vimUtils.buildVimPlugin</code> to create your own:
</div>


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
Line 325: Line 285:
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Using_flake"></span>
==== Using flake ====
==== 使用 Flakes ====
</div>


<code>configuration.nix</code>:
<code>configuration.nix</code>:
Line 378: Line 337:
</syntaxHighlight>
</syntaxHighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
然后我们可以使用 <code>nix flake lock --update-input winresizer-vim</code> 更新软件包,或者使用 <code>nix flake update</code> 更新 flake.nix 中的所有输入。
Then we can update the package with <code>nix flake lock --update-input winresizer-vim</code>, or update all inputs in flake.nix with <code>nix flake update</code>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Vim_as_a_Python_IDE"></span>
=== Vim as a Python IDE ===
=== Vim 用作 Python IDE ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
以下代码片段将创建一个功能齐全的 [[python]] IDE
The following snippet will make a full featured [[python]] IDE.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Using_language_client"></span>
==== Using language client ====
==== 使用语言客户端 ====
</div>


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
Line 415: Line 368:
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
然后将以下表达式添加到 `<code>environment.systemPackages</code>` 或 home-manager 包列表中,以安装 python-language-server
Then put the following expression in <code>environment.systemPackages</code> or in the home-manager package list,
to install python-language-server:
</div>


<syntaxHighlight  lang="nix">
<syntaxHighlight  lang="nix">
(python3.withPackages(ps: [
(python3.withPackages(ps: [
   ps.python-language-server
   ps.python-language-server
   <div lang="en" dir="ltr" class="mw-content-ltr">
   # 以下插件为可选插件,它们提供类型检查、导入排序和代码格式化功能。
# the following plugins are optional, they provide type checking, import sorting and code formatting
</div>
   ps.pyls-mypy ps.pyls-isort ps.pyls-black
   ps.pyls-mypy ps.pyls-isort ps.pyls-black
]))
]))
</syntaxHighlight>
</syntaxHighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Real_life_examples"></span>
=== Real life examples ===
=== 真实示例 ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://github.com/jagajaga/my_configs/blob/master/.nispkgs/common.nix Jagajaga 的配置]
* [https://github.com/jagajaga/my_configs/blob/master/.nixpkgs/common.nix Jagajaga’s config]
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://github.com/andrewrk/dotfiles/blob/master/.nixpkgs/config.nix andrewrk 的配置]
* [https://github.com/andrewrk/dotfiles/blob/master/.nixpkgs/config.nix andrewrk's config]
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://github.com/wagnerf42/nixos-config/blob/master/config/my_vim.nix wagnerf42 的配置(适用于 Rust 语言)]
* [https://github.com/wagnerf42/nixos-config/blob/master/config/my_vim.nix wagnerf42's config (good for rust language)]
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
=== YouCompleteMe ===
=== YouCompleteMe ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
目前 youcompleteme 插件在 Linux 上使用 [https://github.com/NixOS/nixpkgs/blob/8e7b1f2ac2e261d5a644fef860a0d050ea227c06/pkgs/misc/vim-plugins/default.nix#L695 unwrapped clang]。这导致它找不到 <code>stdlib.h</code>。您可以在您的 <code>.ycm_extra_conf.py</code> 文件中添加 [https://github.com/andrewrk/genesis/blob/5f49cd9a8c2b61b9859a22102bc3f732add9461a/.ycm_extra_conf.py 使其正常运行的示例],其工作原理是执行 C/C++ 编译器并使其输出搜索路径列表,其中包括查找 <code>stdlib.h</code> 的搜索路径。
Currently the youcompleteme plugin uses [https://github.com/NixOS/nixpkgs/blob/8e7b1f2ac2e261d5a644fef860a0d050ea227c06/pkgs/misc/vim-plugins/default.nix#L695 unwrapped clang on linux]. This causes it to not find <code>stdlib.h</code>. There is a [https://github.com/andrewrk/genesis/blob/5f49cd9a8c2b61b9859a22102bc3f732add9461a/.ycm_extra_conf.py workaround] you can put in your <code>.ycm_extra_conf.py</code> file, which works by executing the C/C++ compiler and getting it to output the list of search paths - which includes the search path to find <code>stdlib.h</code>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
对于 C/C++ 来说,比 youcompleteme 更好的替代方案是使用 [https://github.com/cquery-project/cquery/ cquery] 并结合 [https://github.com/autozimu/LanguageClient-neovim LanguageClient-neovim]。如果您从 nixpkgs 安装 cquery,它在 nix-shell 中使用时也能找到 C 头文件,因为它使用了一个自定义的 [https://github.com/NixOS/nixpkgs/commit/04f3b76dcec21f2fcba6b1b0afbb3ed224165050#diff-11cdfc0385b9e017089c1ac09c5b838e shell 包装器]
A better alternative to youcompleteme for C/C++ is to use [https://github.com/cquery-project/cquery/ cquery] in combination with the [https://github.com/autozimu/LanguageClient-neovim LanguageClient-neovim]. It will also find in c header files when used in a nix-shell if you install cquery from nixpkgs as it uses a custom [https://github.com/NixOS/nixpkgs/commit/04f3b76dcec21f2fcba6b1b0afbb3ed224165050#diff-11cdfc0385b9e017089c1ac09c5b838e shell wrapper]
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="gvim_and_gview"></span>
== gvim and gview ==
== gvim gview ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
您可以启用 <code>guiSupport</code> 来使 <code>gvim</code> 可用,但这不会让您获得 <code>gview</code>
You can enable <code>guiSupport</code> to make <code>gvim</code> available, though this won't give you <code>gview</code>:
</div>


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">