vimrc写入文件

3

我一直尝试使用vim来简化编写latex的过程。为此,我想编写一个函数来轻松编写矩阵。以下是我希望它能够实现的内容。

当处于插入模式时

如果我键入 mmatrix(不是拼写错误。我想要两个m)

我希望它能够询问我所需的行数和列数

然后打开一个具有所需占位符数量(用<++>表示)的空白矩阵

这是我编写的代码:

imap mmatrix <C-o>:call Matrix
func! Matrix(rows, columns)
    for row in a:rows
       for col in a:columns
           exec "normal! i<++>&  "
       endfor
       exec "normal! i\\\\ <CR>"
    endfor
endfunction

对于一个2x2矩阵,它应该长成这个样子:

<++>& <++>\\
<++>& <++>\\

然而,这并没有起作用。我能知道如何修改此文件以使其按照我的意愿运行吗?


经过一番搜索,我找到了如何编辑imap的方法。但是我仍然不知道如何将内容打印到文件中。 - WiFO215
我已经找到了避免打印的方法。但是现在我不确定如何进行换行。使用<CR>好像没有用。 - WiFO215
1个回答

2
我已经搞定了这个问题:
func! Matrix(rows, columns)
   for row in range(a:rows)
      for col in range(a:columns)
          exe "norm i<++>&  "
      endfor
      exe "norm Xi\\\\\\\<cr>"
   endfor
endfunction

另一种选择是使用命令而不是 IMAP,例如:

另一种选择是使用命令而不是 IMAP,例如:

command! -nargs=1 M :call Matrix(<args>)

在正常模式下,您可以使用:M 2,4调用该函数。


谢谢!Xi是什么意思?我知道X表示删除,i表示插入,但为什么你要以那种特定的方式使用它呢? - WiFO215
在正常模式下,X 会删除光标前的字符。因为该函数在循环中打印 "<++>& ",当循环结束时,行末会多出一个空格。所示例中的内容在 & 和反斜杠之间没有空格,因此我使用 X 删除插入反斜杠和回车符之前的空格。在这种情况下,x 无法工作,因为在打印其他语句后,光标位于“新行”符号上。X 似乎是消除这个问题的简单方法。 - Conner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接