美文网首页
自动转换表格格式的Vim自定义命令

自动转换表格格式的Vim自定义命令

作者: SpaceCat | 来源:发表于2023-04-27 00:16 被阅读0次

0、介绍

有时候会遇到将xls格式的表格,转换为markdown格式的情况。手工转换,非常麻烦,这里在vim中通过一个自定义命令实现。

1、代码实现

vimrc中添加如下内容:

" convert a table copy from excel to makedown table format
" convert a column value list to a markdown format row
function! GenerateAMarkdownTableRowFunc(colValueList)
    let resultStr = ''
    let i = 0
    for colValue in a:colValueList
        let resultStr = resultStr . " | " . colValue
        let i = i + 1
    endfor
    let resultStr = resultStr . " |"
    " remove the space at the beginning
    let resultStr = strpart(resultStr, 1, strlen(resultStr) - 1)
    return resultStr
endfunction
" call GenerateAMarkdownTableRowFunc to convert xls table to markdown
function! GenerateMarkdownTable() 
    " read all lines into a list
    let allLines = []
    g/$/let line = getline(".") | call add(allLines, line)
    let resultLines = []

    " deal with the table head
    let colValueList = split(allLines[0], '\t', 1)
    call add(resultLines, GenerateAMarkdownTableRowFunc(colValueList))
    " deal with the split line between table body and head
    let colValueList = split(allLines[0], '\t', 1)
    let tmpColSplitLineStr = ''
    let i = 0
    for colValue in colValueList
        let tmpColSplitLineStr = tmpColSplitLineStr . " | " . "---"
        let i = i + 1
    endfor
    let tmpColSplitLineStr = tmpColSplitLineStr . " |"
    call add(resultLines, strpart(tmpColSplitLineStr, 1, strlen(tmpColSplitLineStr) - 1))

    " deal with the table body
    let index = 1
    while index < len(allLines)
        let curLine = allLines[index]
        let valList = split(curLine, '\t', 1)
        call add(resultLines, GenerateAMarkdownTableRowFunc(valList))
        let index = index + 1
    endwhile

    " join all lines
    let resultStr = join(resultLines, "\n")
    " replace content of current buffer
    let @u = resultStr
    normal! ggdG
    normal! 0"up
    echo "Markdown table converted!"
endfunction
command GenerateMarkdownTable exec GenerateMarkdownTable()

重新启动vim即可生效。

2、使用

假设有表格从excel中粘贴到一个空的vim缓冲区中,是如下格式:

姓名  年龄  性别  描述
Tom     男   tom是一个好孩子
Jeff    41  男   
Kate    33  女   Kate is a good girl.

执行前面自定义的vim命令,:GenerateMarkdownTable,即可将其转换为如下格式:

| 姓名 | 年龄 | 性别 | 描述 |
| --- | --- | --- | --- |
| Tom |  | 男 | tom是一个好孩子 |
| Jeff | 41 | 男 |  |
| Kate | 33 | 女 | Kate is a good girl. |

3、说明

这个例子中,除了实现了前面的需求,也可以学习到如何读取vim缓冲区中的内容进行变换,有很多灵活运用的空间。

相关文章

  • Linux常用命令整理

    一、命令的基本格式 1、命令行开头的意义 2、命令的基本格式: 二、常用快捷键 三、vim编辑器 1、Vim简介 ...

  • html列表

    无序列表 有序列表 自定义列表 表格 表格书写的快速格式 表格完全格式 单元格合并 细线表格

  • Linux学习(2) Vim学习

    Vim上手 Vim的三种模式 vim三种模式相互转换 命令模式:在命令行模式下,输入"vim 文件名"就进入了命令...

  • 9.22-9.23EXCEL浮掠

    1.自定义快速访问工具栏:自定义,其他命令,所有命令,进行选择。 2.新建工作簿里可选择表格模版 3.条件格式/数...

  • vim安装snippet笔记

    简记:vim中编写代码自动补全和自定义补全,用vim-snippets插件 vim安装snippet方法 cd ~...

  • 自定义表格式布局FormLayout

    自定义表格式布局FormLayout 项目中有这样的表格式布局,如下图 如果用LinearLayout,Relat...

  • Mac 下十六进制查看及编辑

    一、使用系统自带的转换命令 二、使用 VIM 编辑器 1、使用 vim -b 命令打开文件(或者直接打开),这里以...

  • 在linux中将excel表格数据导入Mysql数据库(含中文数

    1. 将excel表格转换成csv格式 将excel表格以csv格式导出,在导出时格式选择CSV UTF-8(逗号...

  • JAVA数据类型转换_自动转换

    A: 自动类型转换 a:表示范围小的数据类型转换成范围大的数据类型,这种方式称为自动类型转换 自动类型转换格式: ...

  • alias设置自己的命令

    gedit ~/.bashrc 末尾添加: alias vi="vim" 在输入vi后,被自动定向到vim这个命令...

网友评论

      本文标题:自动转换表格格式的Vim自定义命令

      本文链接:https://www.haomeiwen.com/subject/rjjbjdtx.html