Làm cách nào để chuyển đổi dòng thành danh sách kiểm tra chế độ org?


12

Giả sử tôi có danh sách sau đây. Tôi muốn chuyển đổi nó thành một danh sách kiểm tra.

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

Làm thế nào để làm nó?

(Tôi đã làm điều đó khi sử dụng kbd-macro. Tôi tự hỏi có một orglệnh để làm điều đó không?)


Có nhiều cách và sự nhanh chóng là chủ quan. Tôi sẽ sử dụng multiple cursorshoặc query-search-replace. Bằng cách chuyển đổi sang danh sách kiểm tra, bạn có nghĩa là chỉ cần thêm vào các dòng với [ ], đúng không?
Kaushal Modi

Đúng. Bạn có thể trình bày ngắn gọn cách sử dụng multiple cursorshay query-search-replacekhông?
Nick

Đây là một lời giải thích chi tiết về cách sử dụng multiple-cursorsđể thực hiện thay thế tìm kiếm. Điều đó cũng sẽ áp dụng cho trường hợp này.
Kaushal Modi

Tìm kiếm trên web nhanh chóng hiển thị các liên kết đến multiple-cursorsvà trang thủ công trên Truy vấn thay thế . Rất nhiều thứ này thực sự là tài liệu tốt, và chỉ là một tìm kiếm trên web.
Dân

Cảm ơn bạn. Nó có vẻ là tiên tiến và một chút phức tạp. Tôi cần phải làm quen với các lệnh / công cụ đó.
Nick

Câu trả lời:


23

Cách đơn giản nhất tôi có thể nghĩ ra:

  1. Chọn danh sách.
  2. Di chuyển điểm đến cột đầu tiên.
  3. C-x r t- [ ]RET

Bạn xong việc rồi.


1
Ồ Chỉnh sửa hình chữ nhật là rất thẳng về phía trước nhưng mạnh mẽ! Cảm ơn bạn!
Nick

Thật tuyệt vời Rất hữu ích để chuyển đổi danh sách kiểm tra.
OrgAddict

11

Đầu tiên, một số ngữ nghĩa cho rõ ràng. Trong org-modemột danh sách đơn giản hoặc là ra lệnh hoặc có thứ tự, bắt đầu với một trong hai một -, +hoặc *(cho có thứ tự), hoặc một số tiếp theo hoặc là một .hoặc một )(đối với lệnh). Vì vậy: "danh sách" bạn mô tả trong ví dụ của bạn chưa phải là org-modedanh sách, vì nó không bắt đầu với bất kỳ viên đạn nào trong số này.

Thứ hai, tôi đoán bởi "danh sách kiểm tra" bạn có nghĩa là các hộp kiểmorg-modesử dụng trong danh sách đơn giản của nó, như trong:

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

Đây là một chức năng rất đơn giản sẽ chuyển đổi tất cả các dòng trong vùng đã chọn thành một danh sách không có thứ tự với các hộp kiểm (không được kiểm tra rộng rãi, nhưng hoạt động trên ví dụ của bạn):

(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

Dưới đây là một cách thú vị khác để chuyển đổi văn bản thành một org-modedanh sách kiểm tra.

Sử dụng các khối mã chế độ Org để chuyển đổi văn bản thành danh sách các hộp kiểm

Lưu ý: Để tạo kết quả sử dụng C-c C-ctrong khi con trỏ nằm trong khối mã.
Sau đó trả lời yeskhi được nhắc.

  1. Gói danh sách của bạn bên trong một khối động được đặt tên

    #+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. Viết một org-modekhối mã bằng ngôn ngữ lập trình yêu thích của bạn.

    Ví dụ 1 - Sử dụng elispKhối mã

    #+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
    

    Ví dụ 2 - Sử dụng perlKhối mã

    #+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
    

    Ví dụ 3 - Sử dụng bashKhối mã

    #+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
    

    Ví dụ 4 - Sử dụng pythonKhối mã

    #+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
    

    Ví dụ 5 - Sử dụng rubyKhối mã

    #+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
    

Cảm ơn đã hỏi câu hỏi của bạn!

Hy vọng rằng đã giúp!

Lưu ý: Mã này đã được kiểm tra bằng các phiên bản sau của chế độ emacs và org.

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

Sử dụng tìm kiếm và thay thế:

M-%Lít Enter - [] Enter

Lưu ý rằng có các khoảng trống xung quanh hộp kiểm, mặc dù chúng không hiển thị tốt ở đây.


Điều này cũng hoạt động rất tốt. Xin lỗi tôi chỉ có thể đánh dấu một là câu trả lời, vì vậy tôi chỉ có thể bỏ phiếu. Cảm ơn rât nhiều.
Nick

3

Trong chế độ Evil hoặc Spacemac, bạn có thể thực hiện việc này, giả sử bạn không thay đổi các ràng buộc khóa mặc định:

  1. Ở trạng thái Bình thường (tương đương với chế độ Bình thường của Vim), di chuyển con trỏ đến đầu dòng đầu tiên trong danh sách của bạn.

  2. Nhấn Ctrl+ v.

  3. Nhấn jmột lần cho mỗi dòng còn lại trong danh sách của bạn. (Hoặc, nhập số dòng còn lại trong danh sách của bạn, theo sau là jkhóa. Ví dụ: ví dụ của bạn : 24j.)

  4. Nhấn Shift+ i.

  5. Loại - [ ].

  6. Nhấn Esc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.