MacroN++ - Tool tạo macro cho Notepad++

  1. Big Bang

    Big Bang Thành viên kích hoạt

    Tham gia ngày:
    3/9/12
    Bài viết:
    391
    Được thích:
    130
    MacroN++ - Tool tạo macro cho Notepad++
    Notepad++ là một general text editor mạnh, nhanh và gọn nhẹ. Nhiều người trên 4r bắt đầu chuyển sang làm ebook bằng Notepad++ cho một số công đoạn tốn nhiều thời gian như lọc text rác chẳng hạn. MacroN++ sẽ hỗ trợ bạn lập trình macro cho Notepad++ một cách dễ dàng và thân thiện hơn.

    1. Giới Thiệu
    MacroN++ là một tool nhỏ hỗ trợ tạo macro cho Notepad++ thân thiện hơn so với lập trình hoặc record trực tiếp trên Notepad++.

    1.1 Macro của Notepad++
    Các macro cho notepad++ được lưu trong file %appdata%\Notepad++\shortcuts.xml trong thẻ <Macros>, mỗi macro ứng với một cặp thẻ <macro>. Ví dụ macro có sẵn khi cài Notepad++:
    Mã:
    <Macros>
    	<Macro name="Trim Trailing and save" Ctrl="no" Alt="yes" Shift="yes" Key="83">
    		<Action type="2" message="0" wParam="42024" lParam="0" sParam="" />
    		<Action type="2" message="0" wParam="41006" lParam="0" sParam="" />
    	</Macro>
    </Macros>
    
    Mỗi macro chỉ gồm các thẻ <Action> với các thông số khác nhau tương ứng với các công việc (action) khác nhau. Số lượng action có rất nhiều (3 chữ số!) nên việc ghi nhớ là rất khó. Về nguyên tắc người ta có thể lập trình macro cho notepad++ hay các ngôn ngữ lập trình như C/C++ bằng các editor đơn giản như notepad của Windows nhưng trên thực tế rất ít người làm như vậy. C/C++ có các công cụ lập trình rất mạnh nhưng macro Notepad++ không hề có. Vì vậy nếu bạn muốn lập trình macro Notepad++ thì phải tự viết tool cho mình hoặc xài đồ cây nhà lá vườn của tôi. :))

    Tạo macro bằng MacroN++ được làm trong 2 bước: viết lệnh bằng MS Excels và sinh mã + cập nhật bằng script EmEditor. MS Excels khá quen thuộc với mọi người, script EmEditor cũng không phải làm gì nhiều, chỉ đơn giản chạy nó là xong.

    Tại sao lại dùng EmEditor mà không phải chính Notepad++ ?
    Dao sắc không gọt được chuôi, Notepad++ đáng tiếc không phải là ngoại lệ. Do đặc điểm của chương trình, bạn không thể cập nhật macro nếu Notepad++ đang chạy! Cập nhật bằng tay khá phiền phức và dễ sai. Nếu sai dù chỉ một chút, toàn bộ file shortcuts.xml sẽ bị xóa sạch và rất có thể bạn sẽ phải cài lại Notepad++ nếu bạn không có bản backup.

    File List:
    generate_npp_macro.xlsm: file MS excels để viết lệnh
    generate_npp_macro.jsee: file java script cho EmEditor để tạo mã và cập nhật macro
    error_list.ebi: file chứa lệnh để sửa lỗi chính tả/scan/đánh máy hàng loạt
    programming_npp_macro.ebi: file chứa lệnh lập trình macro
    shortcuts_xx.xml: các file chứa macro của Notepad++ tôi viết sẵn.

    2. Cài Đặt
    2.1 Download Chương Trình
    - Notepad++ bản mới nhất ở http://notepad-plus-plus.org/
    - EmEditor ở http://www.emeditor.com/
    - MacroN++ ở http://www.mediafire.com/
    2.2 Cài Đặt Chương Trình
    - EmEditor: chấp nhận default options
    - Notepad++: chấp nhận default options
    - MacroN++: Cài đặt script và highlight
    + Cài Đặt Script cho EmEditor: cài script generate_npp_macro.jsee xem topic Bộ Script Nhỏ Gọn Làm Ebook Với EmEditor, Options của EmEditor, 4. Add - Remove Macro
    + Highlight: mở file programming_npp_macro.ebi bằng EmEditor, chọn menu Tools-->Properties for Current Configuration, chọn tab Highlight (2) trong hộp thoại Text Properties, nhập _COMMENT_ vào ô Line Comment, nhấn OK.
    [​IMG]
    Nếu làm đúng bạn sẽ thấy các dòng bắt đầu bằng _COMMENT_ sẽ chuyển sang màu xanh. Các dòng comment màu xanh dùng để chú thích các lệnh macro, chúng không có tác dụng gì cho macro thành phẩm. Các dòng lệnh macro sẽ có màu đen.

    3. Tạo macro sửa lỗi chính tả/scan/đánh máy hàng loạt
    Macro sửa lỗi hàng loạt là một danh sách gồm toàn các lệnh Replace All
    Mở file generate_npp_macro.xlsm và vào sheet Generate_Error_List.
    3.1 Tạo danh sách sửa lỗi mới
    Mỗi lệnh sửa lỗi nằm trên một dòng excels và cần 4 thông số Find What, Replace With, TypeOption. Comment không bắt buộc.
    - Cột Find WhatReplace With: giống như khi dùng MS Word, EmEditor, Notepad++. Cột Find What không được để trống.
    - Cột Type: chỉ lấy các giá trị NORMAL, EXTENDED, REGEX (xem các loại find/replace của notepad++)
    - Cột Option: chỉ lấy các giá trị DOWN, DOWN_CASE, DOWN_WORD, DOWN_WORD_CASE (chỉ hỗ trợ tìm từ trên xuống, nếu Type=REGEX thì Option phải khác DOWN_WORD, DOWN_WORD_CASE)
    - Cột Comment: dùng để chú thích.

    Chú ý: trang Generate_Error_List có dòng tiêu đề cố định (dòng #15) để dễ theo dõi khi danh sách quá dài, khi bạn cuộn trang xuống các dòng sửa lỗi đầu tiên sẽ bị che khuất. Danh sách sửa lỗi phải bắt đầu bằng dòng #16, chú ý số dòng ở lề trái.

    3.2 Tạo danh sách sửa lỗi theo danh sách đã có sẵn
    Nếu bạn đã có danh sách sửa lỗi bằng file text có dạng lỗi=sửa thì có thể tạo nhanh danh sách như sau:
    - mở danh sách lỗi bằng Notepad++ hoặc EmEditor
    - Replace All (extended/use escape sequence hoặc regex)
    Find What: =
    Replace With: \t
    Bạn sẽ thấy dấu = được thay bằng dấu tab, copy all rồi paste vào trang Generate_Error_List, chú ý bắt đầu bằng dòng #16. Sau khi copy xong lỗi sẽ được đưa vào cột Find What, sửa lỗi vào cột Replace With.
    Dùng chức năng kéo cột của Excels để tạo nhanh 2 cột Type và Option

    3.3 Kiểm tra danh sách sửa lỗi
    Dòng tiêu đề (#15) có bộ lọc (filter) để tìm nhanh các dòng bị lỗi hoặc cần chú ý. Ví dụ cột Error dùng để thông báo lỗi, dòng bị lỗi ở cột Error tương ứng sẽ có chữ Lỗi và được tô màu cam. Dùng filter trên cột Error để tìm nhanh các dòng bị lỗi.
    - Cột Correction Rule: nếu không có lỗi, cột này sẽ sinh ra mã macro tương ứng, nếu bị lỗi cột này trống
    - Cột Error: nếu có lỗi cột này hiện chữ Lỗi và tô màu cam, nếu không có lỗi cột này trống
    - Cột Type Prio, Option Prio: độ ưu tiên Type và Option
    - Cột # of Spaces: số khoảng trắng trong Find What
    - Cột # of Words: số từ trong Find What
    - Cột Length: số ký tự (chữ) trong Find What
    - Cột FLS (Findwhat Leading Space): hiện chữ nếu Find What bắt đầu bằng khoảng trắng
    - Cột FTS (Findwhat Trailing Space): hiện chữ nếu Find What kết thúc bằng khoảng trắng
    - Cột RLSFTS: kiểm tra leading và trailing space cho ReplaceWhith, tương tự FLS và FTS
    Ghi chú: trong excels khó nhìn ra các khoảng trắng, dùng các cột kiểm tra khoảng trắng để tìm lỗi

    3.4 Sắp xếp danh sách lỗi
    Sắp xếp lại danh sách lỗi để giảm lỗi do danh sách không chính xác hoặc hợp lý. Thông thường cụm từ dài được sửa trước sẽ chính xác hơn. Ví dụ lỗi sai dấu do scan file ảnh: Hăn là một sát thủ cường hăn. Nếu danh sách của bạn là
    Mã:
    cường hăn=cường hãn
    hăn=hắn
    
    thì câu trên được sửa đúng. Nếu là
    Mã:
    hăn=hắn
    cường hăn=cường hãn
    
    thì sẽ sai mặc dù cả hai dòng sửa lỗi đều chính xác. Sắp xếp danh sách không bắt buộc và tùy ở bạn.

    Cách làm: Trong MS Excels mở tab View, chọn Macros-->View Macros, trong hộp thoại Macro chạy macro autosort

    3.5 Chạy script để update macro
    - Copy code macro ở cột Correction Rule của file excels. Chú ý phải bắt đầu từ dòng #16 (nhìn kỹ lề trái) để khỏi mất dòng.
    - Mở một document mới (tạm gọi là Doc1) trong EmEditor, paste code macro vào đó rồi Replace All (Use Escape Sequence hoặc Regular Expression)
    Find What: _LINE_BREAK_
    Replace With: \r\n
    - Mở file error_list.ebi, xóa tất cả giữa các dòng ở giữa _COMMENT_: BẮT ĐẦU DANH SÁCH LỖI_COMMENT_: KẾT THÚC DANH SÁCH LỖI
    Mã:
    _COMMENT_: -----------------------------------------------------------------------------------------------------------------------
    _COMMENT_: BẮT ĐẦU DANH SÁCH LỖI
    
    [b][color=red](XÓA TẤT CẢ NHỮNG DÒNG Ở GIỮA "_COMMENT_: BẮT ĐẦU DANH SÁCH LỖI" VÀ "_COMMENT_: KẾT THÚC DANH SÁCH LỖI")[/color][/b]
    
    _COMMENT_: KẾT THÚC DANH SÁCH LỖI
    _COMMENT_: -----------------------------------------------------------------------------------------------------------------------
    
    - Copy all ở Doc1 và paste vào giữa 2 dòng đã nói ở trên trong file error_list.ebi
    - Đặt tên cho macro, ví dụ "Sửa lỗi scan": Tìm dòng bắt đầu bằng NPP_MACRO_BEGIN và điền tên macro vào đó.
    Mã:
    _COMMENT_: NPP_MACRO_NAME quy định tên của macro
    _COMMENT_: cú pháp: NPP_MACRO_NAME=<tên macro>
    [b][color=red]NPP_MACRO_BEGIN=Sửa lỗi scan[/color][/b]
    
    Chú ý: nếu bạn đặt tên macro trùng với tên một macro đã có từ trước, macro mới sẽ thay thế macro cũ. Nếu không trùng tên với bất kỳ macro có sẵn nào thì một macro với tên mới sẽ được thêm vào.
    - Chạy script generate_npp_macro.jsee. Nếu Notepad++ đang chạy script sẽ yêu cầu bạn tắt Notepad++.
    - Mở Notepad++ và chạy macro của bạn. Chú ý macro cho Notepad++ chỉ chạy trên file bạn đang edit (active document), nó không kiểm tra tên xem file đó có đúng là file text bạn cần sửa lỗi hay không.
    (Video hướng dẫn sẽ bổ sung sau)

    4. Tạo macro bình thường
    Macro bình thường là macro chứa nhiều lệnh khác nhau. Nếu macro của bạn chỉ gồm toàn các lệnh Replace All bạn có thể viết nó giống như danh sách sửa lỗi ở mục 3. Tạo macro sửa lỗi chính tả/scan/đánh máy hàng loạt ở trên.
    Bạn mở file excels generate_npp_macro.xlsm, vào sheet Macro_Programming
    4.1 Viết mã macro
    Viết lệnh macro từng dòng một. Chú ý dòng tiêu đề (dòng #7) là fixed row, các lệnh phải bắt đầu từ dòng #8.
    - Cột Command: tên của lệnh. Chú ý tên lệnh luôn là chữ in hoa (capital letters)
    - Các cột Find What, Replace With, Type, Option, Comment: giống như ở mục 3 ở trên đối với các lệnh Find/Replace.
    - Các lệnh cần 1 tham số (argument) thì tham số đó phải được đặt ở cột Find What, ví dụ lệnh ENTER_CHAR dùng để chèn một ký tự vào vị trí con trỏ. Các cột Replace With, Type, Option phải để trống.
    - Các lệnh không cần tham số, ví dụ lệnh CHAR_RIGHT_EXT (dịch chuyển con trỏ và mở rộng selection 1 ký tự về bên phải) thì Các cột Find What, Replace With, Type, Option phải để trống.
    - Cột Unvalid sẽ báo loại lỗi nếu lệnh bị lỗi, nếu lệnh đúng nó sẽ được để trống.
    - Các cột Space, L. Space, T. Space sẽ hiện chữ nếu trong tham số (argument) có chứa khoảng trắng, bắt đầu bằng khoảng trắng, kết thúc bằng khoảng trắng.
    - Nếu lệnh không có lỗi cột Pseudo Code sẽ hiện code macro, nếu lệnh lỗi nó sẽ bị để trống.

    4.2 Kiểm tra lỗi
    Dòng tiêu đề có bộ lọc (filter) để kiểm tra nhanh. Ví dụ để tìm nhanh các dòng lệnh bị lỗi bạn lọc các dòng không rỗng (có chữ) ở cột Unvalid
    Sheet Pseudo_Code_References mô tả cách dùng các lệnh. Nếu gặp lỗi bạn có thể tham khảo. Chú ý dòng tiêu đề (dòng #11) là fixed row.

    4.3 Chạy script để update macro
    - Copy tất cả các dòng macro code ở cột Pseudo Code. Chú ý dòng tiêu đề (dòng #7) là fixed row, nhớ copy từ dòng #8, chú ý số dòng ở lề trái.
    - Mở một document mới (tạm gọi là Doc1) trong EmEditor, paste code macro vào đó rồi Replace All (Use Escape Sequence hoặc Regular Expression)
    Find What: _LINE_BREAK_
    Replace With: \r\n
    - Mở file programming_npp_macro.ebi, xóa tất cả giữa các dòng ở giữa _COMMENT_: BẮT ĐẦU THÂN CHƯƠNG TRÌNH_COMMENT_: KẾT THÚC THÂN CHƯƠNG TRÌNH
    Mã:
    _COMMENT_: -----------------------------------------------------------------------------------------------------------------------
    _COMMENT_: BẮT ĐẦU THÂN CHƯƠNG TRÌNH
    
    [b][color=red](XÓA TẤT CẢ NHỮNG DÒNG Ở GIỮA "_COMMENT_: BẮT ĐẦU THÂN CHƯƠNG TRÌNH" VÀ "_COMMENT_: KẾT THÚC THÂN CHƯƠNG TRÌNH")[/color][/b]
    
    _COMMENT_: KẾT THÚC THÂN CHƯƠNG TRÌNH
    _COMMENT_: -----------------------------------------------------------------------------------------------------------------------
    
    - Copy all ở Doc1 và paste vào giữa 2 dòng đã nói ở trên trong file programming_npp_macro.ebi
    - Đặt tên cho macro, ví dụ "Xóa Text Rác": Tìm dòng bắt đầu bằng NPP_MACRO_BEGIN và điền tên macro vào đó.
    Mã:
    _COMMENT_: NPP_MACRO_NAME quy định tên của macro
    _COMMENT_: cú pháp: NPP_MACRO_NAME=<tên macro>
    [b][color=red]NPP_MACRO_BEGIN=Xóa Text Rác[/color][/b]
    
    Chú ý: nếu bạn đặt tên macro trùng với tên một macro đã có từ trước, macro mới sẽ thay thế macro cũ. Nếu không trùng tên với bất kỳ macro có sẵn nào thì một macro với tên mới sẽ được thêm vào.
    - Chạy script generate_npp_macro.jsee. Nếu Notepad++ đang chạy script sẽ yêu cầu bạn tắt Notepad++.
    - Mở Notepad++ và chạy macro của bạn. Chú ý macro cho Notepad++ chỉ chạy trên file bạn đang edit (active document), nó không kiểm tra tên xem file đó có đúng là file text bạn cần sửa lỗi hay không.
    (Video hướng dẫn sẽ bổ sung sau)

    5 Undo On/Off & Macro mẫu
    5.1 Undo On/Off
    Các lệnh TURN_UNDO_ONTURN_UNDO_OFF dùng để bật/tắt undo. Khi tắt Undo macro sẽ chạy nhanh hơn rất nhiều (đặc biệt nếu macro có nhiều lệnh Replace) nhưng bạn không thể undo. Nói chung khi xảy ra lỗi bạn làm lại từ đầu vẫn nhanh hơn sửa nên tôi khuyến nghị bạn tắt undo ở đầu macro (lệnh đầu tiên) và bật undo ở cuối macro (lệnh cuối cùng).
    5.2 Mã Macro mẫu
    Trong file excels có kèm theo 1 danh sách lỗi ở sheet error_list_01 và mã một số macro ở sheet program_list_01. Bạn có thể tham khảo cách viết. Copy từ các sheet đó và paste vào Generate_Error_ListMacro_Programming. Chú ý nên paste Value Only.
    5.3 File Macro mẫu
    Các file macro mẫu dạng shortcuts_xx.xml có thể dùng để thay thế shortcuts.xml của Notepad++. Bạn backup shortcuts.xml rồi rename file macro mẫu thành shortcuts.xml. Nhớ tắt Notepad++ trước khi làm.
    - shortcuts_01.xml: file chứa các macro mẫu ở sheet program_list_01
    - shortcuts_02.xml: file chứa macro mẫu ở sheet error_list_01
    - shortcuts_03.xml: File chứa macro minh họa các lệnh. Bạn dùng file này để biết tác dụng của từng lệnh.
    Ví dụ bạn muốn thay chuỗi aaa thứ 3 từ vị trí hiện tại bằng BBBBB (bỏ qua chuỗi đầu tiên và thứ 2). Bạn có thể dùng 2 lệnh FIND_ONCE(aaa) và một lệnh REPLACE_ONCE(aaa, BBBBB) hoặc 3 lệnh FIND_ONCE(aaa) và 1 lệnh INSERT_STR(BBBBB). Trong đa số trường hợp chúng cho cùng một kết quả, nhưng đôi khi lại khác nhau. Bạn thử vài lần để biết tại sao.
    Bằng cách thử trực quan bạn sẽ tìm cách ghép các lệnh lại thành một macro hoàn chỉnh. Bạn cũng có thể thử ghép các macro mẫu ở sheet program_list_01 thành một macro all-in-one để làm sạch text bằng 1 macro duy nhất.
     
    Chỉnh sửa cuối: 19/8/14
  2. tuanminhktqn

    tuanminhktqn Thành viên kích hoạt

    Tham gia ngày:
    16/4/14
    Bài viết:
    5,874
    Được thích:
    12,205
    Xém nữa thì hiểu, thank bạn :baby14:
     
  3. Big Bang

    Big Bang Thành viên kích hoạt

    Tham gia ngày:
    3/9/12
    Bài viết:
    391
    Được thích:
    130
    .
    Xém chút nữa thì bạn biết lập trình. Tool này dùng để lập trình, không phải để làm eBook. Với dân lập trình giải thích như vậy là tương đối dài dòng. Sorry nếu làm bạn cảm thấy phiền.
     
  4. thanhson

    thanhson Thành viên kích hoạt

    Tham gia ngày:
    7/12/13
    Bài viết:
    337
    Được thích:
    16
    Hix xem kiểu này cũng chưa chắc lập dc cái mac nữa :baby3::baby3::baby3:
     
  5. Big Bang

    Big Bang Thành viên kích hoạt

    Tham gia ngày:
    3/9/12
    Bài viết:
    391
    Được thích:
    130
    Để làm 2 cái videos hướng dẫn cho dễ xài. Từ trước đên giờ chưa làm bao giờ, đang đi kiếm softw :)) Mọi người lấy file shortcuts_03.xml thay vào file shortcuts.xml của Notepad++ (ở trong folder %appdata%\Notepad++\) xài thử sẽ dễ hình dung hơn nhiều. Nhớ backup shortcuts.xml gốc.

    Hầu hết các macro để làm eBook gồm toàn Replace All các kiểu, vì vậy lập trình cũng rất dễ, chỉ cần biết xài Replace của Notepad++ là OK.
     
    Chỉnh sửa cuối: 19/8/14

Thành viên đang xem bài viết (Users: 0, Guests: 0)