你如何在Vim中使用Python?

Léo*_* 준영 51 python vim

我在Vim和Python之间浪费了很多时间.我发现从Python手动复制粘贴到Vim太慢了,反之亦然.一个好的破坏的例子是:

%!python for i in xrange(25); 打印6*i \n

你怎么能在Vim做这样的调整? [解决了]

[澄清] 我需要Vim的东西,比如打印序列,算术...... - 我在Vim做不到的事情.

[?]有人可以详细说明这一点:"你的脚本可以从stdin中读取,直接在给定的行(.,%,...)上运行. "

[进一步澄清]

如果我想在第4,5,6和7行打印'Hello',那有什么不对:

:4-7!python -c"print'hello'"

点.修改当前行.我可以在多行7,32和99上打印:

:7,32,99!python -c"print'hello'"

显然不行.怎么样?

too*_*php 165

在任何vim窗口中,键入以下内容:

for x in range(1,10):
    print '-> %d' % x
Run Code Online (Sandbox Code Playgroud)

目视选择这两行(V以启动可视模式),然后键入以下内容:

:!python
Run Code Online (Sandbox Code Playgroud)

因为你在视觉模式下按下':',最终会看起来像:

:'<,'>!python
Run Code Online (Sandbox Code Playgroud)

按Enter键,选择将被print语句的输出替换.您可以轻松将其转换为映射:

:vnoremap <f5> :!python<CR>
Run Code Online (Sandbox Code Playgroud)

  • 我多年来一直在使用vim和python,但这个建议让我大吃一惊.不知道为什么我从来没有想过. (12认同)
  • 我的天啊.刚刚意识到这个技巧适用于写入stdout的任何东西,例如`ls -l`然后选择Visual并运行`:'<,'>!bash` (7认同)
  • 这是改变! (5认同)
  • 实际上我没有意识到在HL问他的问题之前我可以这么容易地做到这一点我必须找到答案...... (3认同)

too*_*php 6

有人可以详细说明这一点:"你的脚本可以从stdin中读取,直接在给定的行(.,%,...)上运行."

一个常见用途是使用shell中提供的"sort"命令对文本行进行排序.例如,您可以使用以下命令对整个文件进行排序:

:%!sort
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过在可视模式下选择它们然后键入以下几行来排序:

:!sort
Run Code Online (Sandbox Code Playgroud)

您可以使用此命令对第5-10行进行排序:

:5,10!sort
Run Code Online (Sandbox Code Playgroud)

您可以编写自己的命令行脚本(假设您知道如何操作),它会反转文本行.它的工作原理如下:

bash$ myreverse 'hello world!'
!dlrow olleh
Run Code Online (Sandbox Code Playgroud)

您可以使用与您使用的完全相同的方式将其应用于vim中的一个打开文件sort:

:%!myreverse      <- all lines in your file are reversed
Run Code Online (Sandbox Code Playgroud)


Gre*_*ill 5

从您的示例中,您似乎想要执行Python脚本并使脚本的输出显示在当前Vim缓冲区中.如果这是正确的,那么您可以在Vim的命令行中执行以下操作:

%!python -c "for i in xrange(25): print 6*i"
Run Code Online (Sandbox Code Playgroud)

-c为其python提供运行脚本的选项.但是,您可能会发现此技术仅在非常短的情况下有用,因为与其他一些语言不同,Python不适合在一行中编写完整的程序.