如何将行转换为组织模式清单?


12

假设我有以下列表。我想将其转换为清单。

Lec 1 |         1:20:36
Lec 2 |         1:10:32
Lec 3 |         1:08:33
Lec 4 |         1:20:33
Lec 5 |         1:16:50
Lec 6 |         1:08:49
Lec 7 |         1:17:40
Lec 8 |         1:19:47
Lec 9 |         1:21:22
Lec 10 |        1:23:52
Lec 11 |        1:23:45
Lec 12 |        1:25:32
Lec 13 |        1:19:06
Lec 14 |        1:14:28
Lec 15 |        1:11:01
Lec 16 |        1:24:07
Lec 17 |        1:24:34
Lec 18 |        1:17:17
Lec 19 |        1:14:59
Lec 22 |        1:15:08
Lec 23 |        1:16:48
Lec 24 |        1:24:47
Lec 25 |        1:25:21

怎么做?

(我是使用kbd-macro org做到的。我想知道是否有执行此命令的命令?)


有很多方法,而且速度是主观的。我会用multiple cursorsquery-search-replace。通过转换为检查清单,您的意思是简单地在行前面加上,对[ ]吗?
Kaushal Modi 2014年

是。您能否简要说明如何使用multiple cursorsquery-search-replace
尼克

这是有关如何用于执行搜索替换的详细说明multiple-cursors。这也适用于这种情况。
Kaushal Modi 2014年

快速的网络搜索会显示“ 查询替换”的链接multiple-cursors和手册页。其中很多东西确实有据可查,仅需通过网络搜索即可。

谢谢。它似乎是高级的,有点复杂。我需要熟悉那些命令/工具。
尼克

Answers:


23

我想到的最简单的方法:

  1. 选择列表。
  2. 将点移到第一列。
  3. C-x r t- [ ]RET

大功告成


1
哇!矩形编辑非常简单却功能强大!谢谢!
尼克

太棒了 对于转换清单非常有用。
OrgAddict

11

首先,为清楚起见提供一些语义。在org-mode,一个普通列表要么有序或无序,从任一个-+*(对于无序的),或一个数字后跟一个.或一个)(有序)。因此:您在示例中描述的“列表”还不是org-mode列表,因为它不是以这些项目符号开头的。

其次,我假设“检查表”是指在其普通列表中使用的复选框org-mode,如下所示:

- [X] A checked list item
- [ ] An unchecked list item

这是一个非常简单的函数,它将带有复选框的选定区域中的所有行转换为无序列表(未经广泛测试,但适用于您的示例):

(defun org-convert-lines-to-checklist (beg end)
  "Convert all plain lines in region to a plain list with
checkboxes."
  (interactive "r")
  (save-excursion
    (goto-char beg)
    (dotimes (_ (- (line-number-at-pos end) (line-number-at-pos beg)))
      (insert "- [ ] ")
      (indent-according-to-mode)
      (forward-line 1))))

7

下面是将文本转换为清单的另一种有趣的方法org-mode

使用组织模式代码块将文本转换为复选框列表

注意:要生成结果C-c C-c,请在光标位于代码块内时使用。
然后yes在提示时回答。

  1. 将您的列表包装在已命名的动态块中

    #+NAME: my-list-block  
    #+BEGIN:  
    Lec 1 |         1:20:36'  
    Lec 2 |         1:10:32  
    Lec 3 |         1:08:33  
    Lec 4 |         1:20:33  
         ... More ...  
    Lec 24 |        1:24:47  
    Lec 25 |        1:25:21  
    #+END:  
    
  2. org-mode用您喜欢的编程语言编写一个代码块。

    示例1-使用elisp代码块

    #+name: list-into-checklist-elisp
    #+header: :results list raw replace output 
    #+header: :var data=my-list-block()
    #+begin_src elisp
      (dolist (x (split-string data "\n"))
            (princ (format "[ ] %s\n" x)))
    #+end_src
    
    #+RESULTS: list-into-checklist-elisp
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

    示例2-使用perl代码块

    #+name: list-into-checklist-perl
    #+header: :results list raw replace output
    #+header: :var data=my-list-block()
    #+begin_src perl
      map { printf qq([ ] %s\n), $_ } split(/\n/, $data); 
    #+end_src
    
    #+RESULTS: list-into-checklist-perl
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

    示例3-使用bash代码块

    #+name: list-into-checklist-bash
    #+header: :results list raw replace output
    #+header: :shebang #!/usr/bin/env bash
    #+header: :var data=my-list-block()
    #+begin_src sh
      while IFS="\n" read -ra ADDR; do
            for i in "${ADDR[@]}"; do
                echo "[X] $i"
            done
       done <<< "$data"
    #+end_src
    
    #+RESULTS: list-into-checklist-bash
    - [X] Lec 1 |         1:20:36
    - [X] Lec 2 |         1:10:32
    - [X] Lec 3 |         1:08:33
    - [X] Lec 4 |         1:20:33
    - [X]       ... More ...
    - [X] Lec 24 |        1:24:47
    - [X] Lec 25 |        1:25:21
    

    示例4-使用python代码块

    #+name: list-into-checklist-python
    #+header: :results list raw replace output
    #+header: :var data=my-list-block()
    #+Begin_src python
      l = ["[ ] {x}".format(x=row) for row in data.splitlines()]
      for i in l: print i
    #+end_src 
    
    #+RESULTS: list-into-checklist-python
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

    示例5-使用ruby代码块

    #+name: list-into-checklist-ruby
    #+header: :results list raw replace output
    #+header: :var data=my-list-block()
    #+Begin_src ruby
      for l in  data.split("\n")
        puts "[ ] #{l}"
      end
    #+end_src 
    
    #+RESULTS: list-into-checklist-ruby
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

感谢您提出问题!

希望能有所帮助!

注意:此代码已使用以下版本的emacs和org-mode进行了测试。

GNU Emacs 24.4.1 (x86_64-apple-darwin14.0.0, NS apple-appkit-1343.14)
Org-mode version 8.2.10 (8.2.10-29-g89a0ac-elpa)

6

使用搜索和替换:

M-%力克 Enter -[]力克 Enter

请注意,复选框周围有空格,尽管在此处显示得不好。


这也很好。抱歉,我只能将一个标记为答案,所以我只能投票。非常感谢你。
尼克

3

Evil模式Spacemacs中,您可以执行此操作,前提是您尚未更改默认的键绑定:

  1. 在正常状态(相当于Vim的正常模式)下,将光标移动到列表第一行的开头。

  2. Ctrl+ v

  3. j对列表中的其余各行按一次。(或者,键入列表中剩余的行数,然后j键入关键字。例如,您的示例:24j。)

  4. Shift+ i

  5. 输入- [ ]

  6. Esc

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.