Vim片段,没有片段/模板插件

use*_*818 1 vim vim-plugin

我经常使用vim,但是我的工作流程通常会迫使我与其他IDE进行交互,所以我不是一个像神一样的vim poweruser,也不是我想要的.Vim不是我的IDE,也不是我想要的.它是一个快速而轻巧的编辑器,不会妨碍我.

我正在寻找简单的使用和配置,而不是超级功率或金星效率.

到目前为止,我一直在使用我的代码段预加载几个寄存器,然后保留一个备忘单,其中哪个寄存器具有哪个文本块.但是我的寄存器用完了,一个字母数字字母并没有立即提醒我我预装的是什么.

存储任意数量的原始文本块的最简单方法是什么,然后使用单个关键字和1个热键(按任意顺序:关键字<>热键)检索它们.

  • 我不需要语言识别片段(聪明的关键字将是我的解决方案)
  • 我不需要具有上下文感知或任何方式智能的片段
  • 我不打算使用迷你模板语言来简化我的片段,这太过分了.
  • 我的片段应该直接粘贴在他们定义的原始文本中,没有其他内容.

我想我可以开始编写仅仅将文本块打印到当前缓冲区的命名函数.这几乎是我所需要的,但我希望有一种更简单的方法来维护/更新我的代码段集合.


是否有任何覆盖我的用例的极简主义插件,或者我是否需要坚持我的.vimrc/python-commands方法?

次要更新 我没有意识到你可以用mapleader链接这么多字母,这可能提供我需要的魔力.然后我仍然需要别名回到一些更大的函数集(可能使用python来定义命令).

rom*_*inl 7

如果您需要无插件解决方案,可以使用:

  • 缩写

    :iabbrev obj    var foo = {};<Left><Left>
    :iabbrev func   function foo() {<CR><CR>}<Up><Tab>
    :iabbrev lipsum Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer diam augue, egestas quis, aliquam ut, venenatis ut, quam. Quisque ut augue. Integer non neque a lectus venenatis fermentum. Morbi quis eros nec elit molestie vehicula. Integer nunc lacus, sodales posuere, rutrum quis, blandit at, mi. Vivamus imperdiet wisi vel mauris. Morbi mattis ante non metus. Sed turpis dui, fermentum ut, aliquam eget, vulputate ullamcorper, pede. Nam non dolor. Etiam lobortis, urna id bibendum convallis, ligula augue auctor eros, a dictum sapien mi a tellus. Proin vel justo. Nunc malesuada turpis a sapien.
    
    Run Code Online (Sandbox Code Playgroud)

    <Space>如果您不介意尾随空格,或者<C-]>如果您不介意,可以扩展这些.

    :help abbreviations.

  • 插入模式映射

    您可以使用或不使用创建任何所需的复杂映射<leader>.

    这里的关键(双关语)只是选择一个很少使用的键,并将其用作映射的命名空间.例如,在我的法语AZERTY键盘上,我有一个§完全没用的键(不用于Vim,不用于法语,不用于我使用的任何编程语言).如果我想构建一个映射库,我会将它用作这些片段的"领导者":

    :inoremap §obj    var foo = {};<Left><Left>
    :inoremap §func   function foo() {<CR><CR>}<Up><Tab>
    :inoremap §lipsum Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer diam augue, egestas quis, aliquam ut, venenatis ut, quam. Quisque ut augue. Integer non neque a lectus venenatis fermentum. Morbi quis eros nec elit molestie vehicula. Integer nunc lacus, sodales posuere, rutrum quis, blandit at, mi. Vivamus imperdiet wisi vel mauris. Morbi mattis ante non metus. Sed turpis dui, fermentum ut, aliquam eget, vulputate ullamcorper, pede. Nam non dolor. Etiam lobortis, urna id bibendum convallis, ligula augue auctor eros, a dictum sapien mi a tellus. Proin vel justo. Nunc malesuada turpis a sapien.
    
    Run Code Online (Sandbox Code Playgroud)

无论选择缩写还是映射,都可以将它们全部保存在专用文件中:

~/.vim/snippets.vim
Run Code Online (Sandbox Code Playgroud)

并在你的来源~/.vimrc:

runtime snippets.vim
Run Code Online (Sandbox Code Playgroud)

如果您决定将该文件放在~/.vim/目录之外的某个位置,则可以使用以下命令来获取该文件:

source ~/path/to/snippets.vim
Run Code Online (Sandbox Code Playgroud)

编辑

关于<leader>......

<leader>真的不是那么特别:你通常可以把它想象成一个变量但是,就像插入$foo数据库中会插入值一样$foo,注册<leader>something会注册{current value of mapleader}something.

假设您创建自定义<leader>映射:

let mapleader = ","
map <leader>b :bnext<CR>
Run Code Online (Sandbox Code Playgroud)

Vim注册,b.如果您决定<leader>稍后在当前会话中更改您:

:let mapleader = "%"
Run Code Online (Sandbox Code Playgroud)

你还有,b.只有进一步的映射才会使用新的<leader>:

map <leader>b :bnext<CR>
Run Code Online (Sandbox Code Playgroud)

你得到了两个,b%b.

<leader>只有在创建映射时才意味着什么.在使用中,它只是,b%b.