Libre-Office 中的外部编辑器

Libre-Office 中的外部编辑器

在 Libre-Office 中,是否可以使用外部编辑器(例如 Vim 或 Emacs)编辑选择内容?

为了编写此代码,我从 Qutebrowser 调用 Vim,即选中窗口并按 ctrl+e。这将打开 Vim 的一个实例,其中包含窗口中的内容。当我关闭缓冲区时,其新内容将放入 Qutebrowser 的窗口中。Libre-Office 中的类似功能会有所帮助。

我问这个问题,并不是因为我想使用 Libre-Office,而是因为我必须与使用 Word 的人合作。

PS. 理想情况下,斜体应该转换成可以在纯文本中编辑的内容,例如 \it{this}。

答案1

使用以下Python 宏。 去工具 -> 自定义只需按下按键即可运行它。

import os
import tempfile
import uno

def edit_with_vim():
    doc = XSCRIPTCONTEXT.getDocument()
    oVC = doc.getCurrentController().getViewCursor()
    data = oVC.getString()
    encoded_data = data.encode("utf8")
    fileTemp = tempfile.NamedTemporaryFile(delete = False)
    fileTemp.write(encoded_data)
    fileTemp.close()
    os.system('gvim -c "set encoding=utf8" %s' % (fileTemp.name))

g_exportedScripts = edit_with_vim,

编辑

浏览上述链接后,请参阅https://forum.openoffice.org/en/forum/viewtopic.php?f=74&t=12882有关自定义键盘命令来运行宏的教程。

编辑2

此代码将更改发送回 Writer。

import io
import os
from subprocess import call
import sys
import tempfile
import uno

def edit_with_vim():
    doc = XSCRIPTCONTEXT.getDocument()
    oVC = doc.getCurrentController().getViewCursor()
    textstring = oVC.getString()
    text_bytes = textstring.encode("utf8")
    tf = tempfile.NamedTemporaryFile(delete = False)
    tempfilename = tf.name
    tf.write(text_bytes)
    tf.close()
    if os.name == 'nt':
        GVIM = "C:/Windows/gvim.bat"
    else:
        GVIM = "/usr/bin/gvim"
    call([
        GVIM, "-f",
        "-c", '"set encoding=utf8"',
        tempfilename])
    with io.open(tempfilename, 'r+b') as fh:
        fh.seek(0)
        edited_bytes = fh.read()
    os.unlink(tempfilename)
    edited_string = edited_bytes.decode("utf8")
    edited_string = edited_string.strip()
    oVC.setString(edited_string)

g_exportedScripts = edit_with_vim,

相关内容