仅使用VIM命令创建python注释字符串

时间:2019-01-29 14:56:49

标签: vim

我有一个vim函数:

function! Pycom(word)
    let a:inserted_word = ' ' . a:word . ' '
    let a:word_width = strlen(a:inserted_word)
    let a:length_before = (118 - a:word_width) / 2
    let a:hashes_before = repeat('#', a:length_before)
    let a:hashes_after = repeat('#', 118 - (a:word_width + a:length_before))
    let a:hash_line = repeat('#', 118)
    let a:word_line = '# '. a:hashes_before . a:inserted_word . a:hashes_after

    :put =toupper(a:word_line)
endfunction
noremap <leader>pc :call Pycom('')<Left><Left>

创建Python注释。输出如下:

# ########################################### Hello World ############################################

如何仅在Vim命令中创建键映射以放置在vimrc中以创建注释字符串?我需要这样做,因为我使用PyCharm,并且在Vim仿真模式下它不允许调用函数。

1 个答案:

答案 0 :(得分:3)

如果仅缺少:function,则可以将单个命令内联成长而难看的命令序列。但是Vim仿真不太可能会忽略功能。问题在于Vimscript本身与Vim本身紧密绑定,并且大多数情况下只是由行为通过其在Vim内部的唯一实现来指定。因此,我猜想strlen()repeat()甚至:put ={expression}在PyCharm中都不起作用。

大多数Vim仿真仅提供基本的:map命令。在不了解PyCharm的情况下,可以尝试以下常规方法:

  • 如果仿真提供了:!(或:{range}!)命令来调用外部命令,则可以在外部命令中实现该功能,可以使用您喜欢的任何编程语言来实现。 (如果仿真不提供:{range}!命令,则必须先:write缓冲区,然后以某种方式将文件名和当前位置传递给外部命令。)
  • 某些仿真器还提供了一个非标准命令来调用其自己的核心编辑器功能(因此您可能可以用它来实现)或什至是任意自定义代码;例如,对于基于NodeJS的编辑器,它可以是JavaScript代码。

通常,Vim仿真的功能十分有限,只能仿真基本的vi功能(尽管我也看到过一些流行的Vim插件(如Surround.vim)的自定义重新实现)。

替代

要在您的IDE中获得Vim的更多特殊功能,请同时使用两者;在您的IDE中设置外部工具非常容易,该工具可以使用当前文件(和位置)启动Vim。自动重新加载更改(在Vim中通过:set autoread)使您可以同时编辑源代码。