Đến nội dung


Hình ảnh
* * * * - 4 Bình chọn

How to use Visual LISP Editor


  • Please log in to reply
55 replies to this topic

#1 lyky

lyky

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 126 (tàm tạm)

Đã gửi 13 May 2013 - 04:01 PM

Dẫn nhập

 

Topic này được mở để thảo luận và chia sẽ những kinh nghiệm sử dụng trình soạn Visual LISP Editor với các bạn mới bắt đầu và những ai có nhu cầu. Chúng tôi chân thành đón nhận những hướng dẫn; góp ý và các câu hỏi, vướng mắc được đặt ra trong quá trình sử dụng VLIDE, từ đó anh em thảo luận để có hướng giải quyết vấn đề, ngỏ hầu phục vụ anh em được tốt hơn. Chúng tôi không mong đợi những comment không mang tính đóng gốp; ly khai và cực đoan, xin lỗi vì chúng tôi chưa được rèn luyện công phu "né đá". Chân thành cám ơn sự quan tâm và mong chờ sự chia sẽ, đóng gốp của tất cả các bạn trong diễn đàn. Cầu chúc niềm vui; sức khỏe và thành công cho các bạn!
 

Sơ lược về Visual LISP Editor

 
Một chương trình AutoLISP có thể được viết bằng bất cứ chương trình soạn thảo văn bản nào (Notepad; WordPad; MS.Word; Notepad++), sau đó lưu lại với đuôi *.LSP. Tuy nhiên, với các trình soạn thảo này, chúng ta chỉ thuần túy viết code mà không hề được hỗ trợ các công cụ để có thể chạy thử, tìm lỗi và gỡ lỗi. AutoCAD chính nó đã cung cấp một trình soạn thảo Visual LISP, thỏa mãn được các đòi hỏi trên.
 
Chân thành cám ơn các bạn đã tham gia thảo luận trong topic: Gia_Bach; Tue_NV; Doan Van Ha; Song Nhi
 

Mục lục tổng kết một số tiện ích của Visual LISP Editor đã được thảo luận trong topic

 
1/- Kiểm tra và gỡ lỗi code, tham khảo tại: [#6][#49].
 
2/- Giải phóng bộ nhớ bằng cách chuyển danh sách 
biến toàn cục thành biến cục bộ, tham khảo tại: [#19]; [#21]; [#22][#50].
 
3/- Quản lý lisp bằng tiện ích Project, tham khảo tại:
[#20][#24].
 
4/- Chức năng AutoComplex, tham khảo tại:
[#26].
 
5/- Định dạng code, tham khảo tại:
[#30].
 
6/- Xem cú pháp hàm trực tiếp trong VLIDE, tham khảo tại:
[#38].
 
7/- Xem trước giao diện DCL, tham khảo tại:
[#40].
 
8/- Đóng gói ứng dụng, tham khảo tại:
[#43].
 
9/- Và các tiện ích khác, đang chờ các bạn bổ xung ...

22665_flowerba.gif

Mời các Bác tiếp tục chia sẽ những kinh nghiệm sử dụng Visual LISP Editor!


  • 3

22665_13x13progress.gif   22665_lyky.gif   22665_13x13progress.gif


#2 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 13 May 2013 - 06:52 PM

Cái tiêu đề dịch sang Tiếng Việt là "Sử dụng chương trình soạn thảo Visual Lisp như thế nào" bạn ạ.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#3 Song Nhi

Song Nhi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: 52 (tàm tạm)

Đã gửi 13 May 2013 - 09:24 PM

Em là người mới bắt đầu học LISP, món này rất cần thiết đây!
 
@ Bác Thaistreetz ơi, Bác là một trong các cao thủ trong ngành này, bác chia sẽ những kinh nghiệm của mình để hướng dẫn tụi em với, tựa đề bằng tiếng Anh thế mọi người cũng hiểu được mà, như Slogen của Bác đấy thôi, cũng toàn tiếng Anh cả đấy chứ!
 
Trong bài: [yêu cầu] Lisp vẽ hình chữ nhật , line: http://www.cadviet.c...-hinh-chu-nhat/
Đã có các bác: Duy782006; Tue_NV và bác Doan Van Ha viết giúp bạn ấy rồi, em thấy vấn đề không phải khó lắm, cũng viết một lisp, nhưng không chạy được, vì còn sai nhiều chỗ, các Bác chắc đọc code sẽ phát hiện nhiều chỗ sai của em. Tuy nhiên, em mong muốn các Bác có thể hướng dẫn cách sử dụng các công cụ của Visual LISP Editor để phát hiện lỗi và sửa lỗi, từ đó những người mới học như tụi em sẽ rút ra những bài học kinh nghiệm!
 
Em xin trình bày lại yêu cầu của bạn ấy: Nhập vào 2 điểm và một khoảng offset, vẽ hình chữ nhật nhận 2 đỉnh ấy làm 2 đỉnh chéo, kết quả là HCN được offset từ HCN chuẩn ra hay vào trong một khoảng bằng khoảng nhập vào. Code của em đây:
(defun pxy(d x y) (polar (polar d 0 x) (* 0.5 pi) x))
(defun SN(id / )
(setq D1 (getpoint "\nVui long pick diem Bottom Left\n")
      D3 (getcorner D1 "\nVui long pick diem Top Right\n"))
(setq an  (getint "\nVui long nhap khoang offset: <110>\n")) (if (= an nil) (setq an 110))
(setq bn (- 0 an))
(setq D2 (list (car D1) (cadr D3))
      D4 (list (car D3) (cadr D1)))
(cond
((= id 1) (setq D11 (pxy D1 bn bn)
                D22 (pxy D2 bn an)
                D33 (pxy D3 an an)
                D44 (pxy D4 an bn))
((= id 2) (setq D11 (pxy D1 an an)
                D22 (pxy D2 an bn)
                D33 (pxy D3 bn bn)
                D44 (pxy D4 bn an)))))
(Command "_pline" D11 D22 D33 D44 "C")
(princ))
(defun C:SN+() (SN 1))
(defun C:SN-() (SN 2))
Chân thành cám ơn các Bác đã quan tâm!
  • 1

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 13 May 2013 - 09:38 PM

Song Nhi đọc thêm cái này để tham khảo. Viết bằng Visual lisp hay Notepad++ đều có những ưu/nhược điểm riêng.

Tôi thì mê Notepad++ hơn.

Trong link này các comments còn bỏ sót rất nhiều điều hay của N++, tự tìm hiểu dần sẽ thấy thôi.

http://www.cadviet.c...o-de-viet-lisp/


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 volleyball

volleyball

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 14 May 2013 - 08:30 AM

Thế mà mình tưởng topic này đặt ra để luyện tiếng Anh chứ! hihi..


  • 0

#6 lyky

lyky

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 126 (tàm tạm)

Đã gửi 14 May 2013 - 10:20 AM

Check và gỡ lỗi code với Visual LISP IDE

1/- Các bạn xem đoạn code mẫu sau

(defun c:test ( / ss i sl total entity elist )
(if (setq ss (ssget '((0 . "LINE"))))
    (progn
      (setq i -1 sl (sslength ss) total 0)
      (while (<= (setq i (1+ i)) sl)
        (setq entity (ssname ss i)
              elist  (entget entity)
              total  (+ total (distance (cdr (assoc 10 elist)) (cdr (assoc 11 elist))))))
      (princ (strcat "\nTotal Length: " (rtos total)))))
(princ))

Tất nhiên, với kiến thức và kinh nghiệm của các bạn, các bạn có thể đọc và gỡ lỗi một cách thủ công. Tuy nhiên, trong bài này chúng tôi trình bày cách dùng công cụ của Visual LISP IDE để xác định vị trí lỗi và gỡ lỗi đó.
Trước tiên, bạn khởi động AutoCAD và nhập lệnh VLIDE (hoặc VLISP) để mở chương trình Visual LISP IDE, mở một file mới, copy đoạn code mẫu trên vào.
Vẽ một vài line trong CAD để kiểm tra, Trở lại VLIDE load code bằng biểu tượng load hoặc tổ hợp phím: Ctrl+Alt+E
Chạy thử bằng cách nhập lệnh: TEST tại command line, chúng ta sẽ nhận được thông báo lỗi như sau:

; error: bad argument type: lentityp nil

Và trở lại VLIDE, kiểm tra: Debug » Break on Error tùy chọn này đã được check, nghĩa là VLIDE đã đặt một điểm break tại vị trí lỗi.
 
2/- Xác định vị trí lỗi
Để xác định vị trí lỗi, ta vào: Debug » Last Break Source (hoặc tổ hợp phím: Ctrl+F9)
 

22665_h1.png

 
Reset lại điểm break bằng cách: Debug » Reset to Top Level (hoặc tổ hợp phím: Ctrl+R). Vậy chúng ta đã xác định được vị trí lỗi, nhưng còn phải xác định vì sao lỗi tại đó nữa?!!
 
3/- Xác định nguyên nhân lỗi
Để giúp trả lời câu hỏi này, VLIDE có một vài công cụ khác mà chúng ta có thể sử dụng.
 
3.1/- Adding Break Points: Ta chèn thêm những điểm break để kiểm soát từng đoạn code nhỏ. Trong trường hợp này lỗi xảy ra trong vòng lặp (while, cách chèn: Đặt nháy tại vị trí chèn và Debug » Toggle Break Point (hoặc nhấn phím: F9)

22665_h2.gif

3.2/- Watching Variables: VLIDE cũng cho phép chúng ta theo dõi biến được sử dụng trong các code, hiển thị giá trị của nó và giá trị của những biến liên đới với nó. Double-click vào một biến nào đó và View » Watch Window (hoặc tổ hợp phím: Ctrl+Shift+W) để xem giá trị, theo dõi thêm một biến liên đới với nó bằng cách tô chọn biến đó và Debug » Add Watch (hoặc nhấn phím: Ctrl+W). Trong trường hợp này ta chọn 2 biến “i” và “entity”.
 
3.3/- Animating the Code: Trong CAD, chạy thử đoạn code một lần nữa, chúng ta nhập: TEST tại command line. Sau khi trở lại VLIDE chúng ta vào Debug » Animate và đánh dấu tùy chọn này check. Sau đó vào Debug » Continue (hoặc chọn biểu tượng mũi tên xanh trên thanh Debug, hoặc tổ hợp phím Ctrl+F8)

22665_h3.gif

Các giá trị của các biến trong cửa sổ Watch giúp chúng ta điều tra được nguyên nhân lỗi. Trong trường hợp này, giá trị của “entity → nil” khi “i → 3”, điều này cho thấy với i=3 đã thoát khỏi điều kiện kiểm tra của vòng lặp, do đó “entity → nil”.
Reset lại điểm break bằng cách: Debug » Reset to Top Level (hoặc tổ hợp phím: Ctrl+R) và xóa tất cả các điểm break bằng cách Debug » Clear all Break Points (hoặc tổ hợp phím Ctrl+Shift+F9). Sau đó vào Debug » Animate và hủy đánh dấu tùy chọn này uncheck.
 
4/- Sửa lỗi
Với thiết định ban đầu i=-1, vậy nó điều kiện vòng lặp sẽ được thực thi đến khi i=(sl-1) thì dừng và thoát ra, như vậy ta có thể sửa lại code như sau:

(defun c:test ( / ss i sl total entity elist )
(if (setq ss (ssget '((0 . "LINE"))))
    (progn
      (setq i -1 sl (sslength ss) total 0)
      (while (< (setq i (1+ i)) sl)    ;;; “<=” da duoc thay bang “<” ;;;
        (setq entity (ssname ss i)
              elist  (entget entity)
              total  (+ total (distance (cdr (assoc 10 elist)) (cdr (assoc 11 elist))))))
      (princ (strcat "\nTotal Length: " (rtos total)))))
(princ))

Đó chỉ là một cách, tùy bạn có thể sửa bằng cách khác, vd: thiết định ban đầu cho i=0 chẳng hạn…
 
5/- Tham khảo thêm tài liệu trợ giúp của VLIDE
 

22665_vlidehelp.png

Nguồn bài viết: Lý Mẹc


  • 4

22665_13x13progress.gif   22665_lyky.gif   22665_13x13progress.gif


#7 lyky

lyky

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 126 (tàm tạm)

Đã gửi 14 May 2013 - 10:34 AM

Em là người mới bắt đầu học LISP, món này rất cần thiết đây!
 
Tuy nhiên, em mong muốn các Bác có thể hướng dẫn cách sử dụng các công cụ của Visual LISP Editor để phát hiện lỗi và sửa lỗi, từ đó những người mới học như tụi em sẽ rút ra những bài học kinh nghiệm!

Code của bạn sau khi chạy debug báo vị trí lỗi như sau:
 
22665_h5.jpg
 
Do bạn viết vội nên thừa - thiếu dấu ngoặc mà thôi, tôi đã fix lại sau đây, LISP chạy được, nhưng chạy có đúng ý đồ của bạn hay không, đề nghị bạn test lại và tự điều chỉnh các phép tính toán nhé! Code đây:

 
(defun pxy(d x y) (polar (polar d 0 x) (* 0.5 pi) y))
(defun SN(id / )
(setq D1 (getpoint "\nVui long pick diem Bottom Left\n")
      D3 (getcorner D1 "\nVui long pick diem Top Right\n"))
(setq an  (getint "\nVui long nhap khoang offset: <110>\n")) (if (= an nil) (setq an 110))
(setq bn (- 0 an))
(setq D2 (list (car D1) (cadr D3))
      D4 (list (car D3) (cadr D1)))
(cond
((= id 1) (setq D11 (pxy D1 bn bn)
                D22 (pxy D2 bn an)
                D33 (pxy D3 an an)
                D44 (pxy D4 an bn)))   ;;; Thieu ) da sua
((= id 2) (setq D11 (pxy D1 an an)
                D22 (pxy D2 an bn)
                D33 (pxy D3 bn bn)
                D44 (pxy D4 bn an))))  ;;; Thua ) da sua
(Command "_pline" D11 D22 D33 D44 "C")
(princ))
(defun C:SN+() (SN 1))
(defun C:SN-() (SN 2))

@ Bác Doan Van Ha - cám ơn Bác đã quan tâm đến vấn đề, chúc Bác nhiều SK và thành công trong công việc nhé!


  • 2

22665_13x13progress.gif   22665_lyky.gif   22665_13x13progress.gif


#8 Song Nhi

Song Nhi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: 52 (tàm tạm)

Đã gửi 14 May 2013 - 08:32 PM

@ Bác Doan Van Ha: Cám ơn bác đã định hướng việc sử dụng Notepad++ để coding, công cụ này thú vị lắm, mặc dù chưa biết được nhiều về nó, bác nói trong Topic bác gởi, mọi người chưa khai thác được nhiều điều hay khi coding bằng Notepad++, nếu bác vui lòng bớt chút thời gian hướng dẫn thêm vấn đề này thì hay quá! Không biết như vậy có phải tham lam quá không?! Vote bác!
 
@ Bác lyky: Cám ơn bác lyky đã hướng dẫn cách check code LISP bằng các công cụ của Visual LISP IDE, đối với những người bập bẹ coding như chúng tôi thì cách đó thật hiệu quả, vì đã định vị được ngay vị trí lỗi của code, các bác có nhiều kiến thức và kinh nghiệm có thể tránh những sai sót đó, và thậm chí nếu quá trình coding có sai sót thì các bác cũng có thể dễ dàng kiểm tra thủ công lại, làm như vậy vẫn nhanh hơn! Tính vote bác mà: "You have reached your quota of positive votes for the day", cám ơn bằng lời chân thành bác nhé! Em đã tự fix lại code trong post #3 được rồi! Bác có thể post tiếp những công cụ và tiện ích khác nữa của Visual LISP IDE?!
 
Tuy không có cách xác định được điểm xảy ra lỗi bằng công cụ, nhưng nếu chịu khó kiểm tra tý, cũng sẽ phát hiện chuyện thừa thiếu dấu ngoặc () trong code mà em đã up lên bằng Notepad++, như sau:
 
118347_song_nhi_1.gif
 
Mặc dù không tích hợp các tiện ích để check code, nhưng bù lại Notepad++ có chức năng "shrinkage" thật hay, như vậy chúng ta có thể dẹp gọn màn hình coding, đóng gói những đoạn đã hoàn tất, để có thể tập trung quan tâm đến đoạn đang viết v.v...
  • 1

#9 lyky

lyky

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 126 (tàm tạm)

Đã gửi 15 May 2013 - 08:54 AM

Cái tiêu đề dịch sang Tiếng Việt là "Sử dụng chương trình soạn thảo Visual Lisp như thế nào" bạn ạ.

 

Cám ơn lòng tốt của bác Thaistreetz nhé, trước khi giúp người khác bác làm ơn thì làm ơn cho trót, bớt chút thời gian quý báu của mình đọc lược sơ qua yêu cầu người ta phát nhé! Mà cũng có khi bác đọc rùi mà "gà mờ"?!
 
Tui đâu có nhờ bác dịch tựa đâu? Nếu bác có thời gian đi dịch "giúp" mọi người, mặc nhiên không cần người ta nhờ mình, thì trên diễn đàn mình nhiều lắm, kể như nick thành viên, đa số dùng ngoại ngữ ...
 
Bác mà làm quả này, chắc không sợ thất nghiệp đâu! Sẵn rãnh, dịch luôn các tựa khác trong diễn đàn, dịch luôn những meg của diễn đàn mình - hiện đang thông báo bằng tiếng Anh, như vậy thì anh chị em trên diễn đàn được nhờ và mang ơn bác lắm!
 
Ah! Mà còn một chuyện hay hơn nữa, trước khi đi "dịch giúp" người khác, bác hãy tự dịch giúp bản thân mình trước nhé! Nick của bác là: "Thaistreetz" chắc không phải là tiếng Việt rồi?! Vậy nghĩa của nó là gì vậy? Tiếng Cambodia hả? Còn câu: "IN HIM, I TRUST. THE TRUST IN MY GOD" sao bác không tự dịch giúp bản thân mình - không ngờ trên đời vẫn còn sót lại những người quên đi bản thân - toàn lo đi "giúp" người khác như bác!

Thú vị thật, bác rành nhiều sinh ngữ quá, rành cả tiếng Cam, cả tiếng Anh... , khâm phục!


  • 0

22665_13x13progress.gif   22665_lyky.gif   22665_13x13progress.gif


#10 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 15 May 2013 - 01:39 PM

Em là người mới bắt đầu học LISP, món này rất cần thiết đây!
 
@ Bác Thaistreetz ơi, Bác là một trong các cao thủ trong ngành này, bác chia sẽ những kinh nghiệm của mình để hướng dẫn tụi em với, tựa đề bằng tiếng Anh thế mọi người cũng hiểu được mà, như Slogen của Bác đấy thôi, cũng toàn tiếng Anh cả đấy chứ!
 
Trong bài: [yêu cầu] Lisp vẽ hình chữ nhật , line: http://www.cadviet.c...-hinh-chu-nhat/
Đã có các bác: Duy782006; Tue_NV và bác Doan Van Ha viết giúp bạn ấy rồi, em thấy vấn đề không phải khó lắm, cũng viết một lisp, nhưng không chạy được, vì còn sai nhiều chỗ, các Bác chắc đọc code sẽ phát hiện nhiều chỗ sai của em. Tuy nhiên, em mong muốn các Bác có thể hướng dẫn cách sử dụng các công cụ của Visual LISP Editor để phát hiện lỗi và sửa lỗi, từ đó những người mới học như tụi em sẽ rút ra những bài học kinh nghiệm!
 
Em xin trình bày lại yêu cầu của bạn ấy: Nhập vào 2 điểm và một khoảng offset, vẽ hình chữ nhật nhận 2 đỉnh ấy làm 2 đỉnh chéo, kết quả là HCN được offset từ HCN chuẩn ra hay vào trong một khoảng bằng khoảng nhập vào. Code của em đây:

(defun pxy(d x y) (polar (polar d 0 x) (* 0.5 pi) x))
(defun SN(id / )
(setq D1 (getpoint "\nVui long pick diem Bottom Left\n")
      D3 (getcorner D1 "\nVui long pick diem Top Right\n"))
(setq an  (getint "\nVui long nhap khoang offset: <110>\n")) (if (= an nil) (setq an 110))
(setq bn (- 0 an))
(setq D2 (list (car D1) (cadr D3))
      D4 (list (car D3) (cadr D1)))
(cond
((= id 1) (setq D11 (pxy D1 bn bn)
                D22 (pxy D2 bn an)
                D33 (pxy D3 an an)
                D44 (pxy D4 an bn))
((= id 2) (setq D11 (pxy D1 an an)
                D22 (pxy D2 an bn)
                D33 (pxy D3 bn bn)
                D44 (pxy D4 bn an)))))
(Command "_pline" D11 D22 D33 D44 "C")
(princ))
(defun C:SN+() (SN 1))
(defun C:SN-() (SN 2))
Chân thành cám ơn các Bác đã quan tâm!

Hề hề hề,

Bạn kiểm tra lại dòng code này:

D44 (pxy D4 bn an)))))

Sao m2 lắm ngoặc rứa???

Dòng code này:

(defun pxy(d x y) (polar (polar d 0 x) (* 0.5 pi) x))

Thế cho thằng y vào để làm chi vậy???


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 15 May 2013 - 02:50 PM

Thể theo yêu cầu của 1 số thành viên, tôi mạn phép tóm tắt một số tiện ích hay của Notepad++ (N++).

Bài viết này có tham khảo thêm ở topic http://www.cadviet.c...al-lisp-editor/

1). Về màu sắc:

N++ và VL đều có chức năng gán các màu sắc khác nhau cho từng kiểu dữ liệu khác nhau: string, symbol, number, comment, function… Nhờ vậy, nhìn rất trực quan. Đặc biệt, nhờ gán màu sắc khác nhau mà có thể phát hiện code sai. Ví dụ: nếu gán function là màu blue thì khi ta code tên hàm đúng nó sẽ chuyển sang màu blue, còn code tên hàm sai thì màu không chuyển. Chức năng này giữa N++ và VL có thể coi là tương đương, chỉ Notepad là không có.

Lưu ý: vì N++ được viết để code cho nhiều ngôn ngữ lập trình (Lisp, Pascal, C, Matlab…) nên các hàm lisp có sẵn trong thư viện bị thiếu. Người dùng có thể phải bổ sung nếu muốn chức năng màu sắc này hoạt động luôn đúng.

2). Về font chữ:

N++ hơn hẳn VL. VL (ở Cad2007) chỉ có mỗi 8 font chữ, trong khi ở N++ có gần như đầy đủ những font gì mà  CAD có (hay Window có?). Nhờ font chữ đa dạng nên N++ trình bày đẹp, đặc biệt là rất phù hợp để viết những dòng chú thích bằng tiếng Việt.

3). Về View:

N++ có khả năng zoom in/out, trong khi VL không có chức năng này.

4) Về khả năng Undo:

N++ có thể undo trở về đến trạng thái ban đầu lúc mới mở file, bất kể quá trình code có save nhiều lần. VL chỉ có khả năng undo về đến trạng thái đã save gần nhất, chứ không có khả năng undo về như lúc mở file. Đây có lẽ là 1 hạn chế của VL?

5). Về chức năng đánh dấu:

N++ có chức năng đánh dấu các dòng cần theo dõi ở bất kỳ vị trí nào. VL thì không có.

6). Tính update:

Cả N++ và VL đều có tính update. Nghĩa là: khi đồng thời mở file trên N++/VL và trên 1 phần mềm khác thì nếu ở phần mềm khác bạn edit và save thì ngay sau đó ở N++/VL file sẽ được update những thay đổi.

7). Kiểm tra cặp dấu ngoặc ():

Cả N++ và VL đều có chức năng này, nhưng thể hiện bằng 2 cách khác nhau, và có vẽ như N++ tiện dụng hơn. Với N++ thì khi bạn đặt trỏ ở 1 vị trí dấu ngoặc nào đó, tương ứng dấu ngoặc kia (và cả nó) sẽ được highlight. Với VL thì phải double click. Thêm nữa, ở N++ khi đặt trỏ ở dấu ngoặc thừa nó sẽ không highlight mà chuyển qua màu khác, còn ở VL khi viết dấu ngoặc thừa nó sẽ phát ra âm thanh báo hiệu.

8). Mở nhiều file:

N++ thể hiện các file được mở bởi các tab xếp nối đuôi nhau trên đầu editor, rất dễ nhìn và dễ nhảy qua lại giữa các tab để làm việc. Trong khi VL thể hiện các file khó chịu hơn. Riêng trong menu “Window” thì chúng giống nhau.

9). Ngôn ngữ code:

N++ là ngôn ngữ để code với rất nhiều ngôn ngữ lập trình, trong đó code lisp chỉ là 1 kiểu. Riêng VL thì chỉ dùng trong Cad để code lisp mà thôi.

10). Ẩn/hiện khối:

Đây là chức năng rất hay mà N++ có nhưng VL không có. Chức năng này đặc biệt có ý nghĩa với những file lisp lớn, chứa nhiều hàm con. Nó dùng để ẩn các khối đã hoàn thành, làm cho file lisp "ngắn" hơn, dễ theo dõi hơn.

Các khối có thể gồm các đoạn code nằm trong các hàm như: defun, repeat, while, foreach, vla-for… Nói chung, khối là một hàm hoàn thành được viết trên nhiều dòng.

11). Find, Replace and Count:

* Đánh dấu chuỗi: với N++, chỉ cần bôi đen (hoặc double click) vào 1 string thì tất cả string giống nó sẽ được bôi đen đồng loạt, khiến cho việc tìm kiếm string rất trực quan. Chức năng này chưa thực sự hoàn hảo, tuy nhiên, so với VL thì nó không có chức năng này.

* Find and Replace: N++ có thể tìm và thay trên tất cả file đang mở chứ không chỉ mỗi file hiện hành. VL cũng làm được điều này nhưng cách thao tác và cách thể hiện kết quả của VL không thân thiện bằng N++.

* Count: N++ có chức năng đếm các string giống nhau. VL không có chức năng này.

12). Về check lỗi:

VL ưu việt hơn N++ (xin xem thêm bài viết của Lyky ở trên, dù nó chưa thực sự đầy đủ).

13). Đang chờ các bạn bổ sung…

Kết luân:

Vì cố tình phân tích ưu điểm của N++ so với VL nên rất có thể có những nhận định trên mang tính chủ quan, thiếu chính xác và có phần thiên vị N++… Mong mọi người góp ý bổ sung thêm, đặc biệt là phân tích những ưu điểm mà VL có còn N++ thì không, để các thành viên có thể cân nhắc lựa chọn được ngôn ngữ code lisp phù hợp nhất.

Trân trọng cảm ơn!


  • 3

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#12 Song Nhi

Song Nhi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: 52 (tàm tạm)

Đã gửi 15 May 2013 - 06:35 PM

@ Bác PhamThanhBinh:  Em đã sửa lại những lỗi đó rồi, cám ơn bác đã quan tâm!
@ Bác Doan Van Ha: Cám ơn bác vì kiến thức và sự nhiệt tình hướng dẫn của bác!

 

Thể theo yêu cầu của 1 số thành viên, tôi mạn phép tóm tắt một số tiện ích hay của Notepad++ (N++).
Bài viết này có tham khảo thêm ở topic http://www.cadviet.com/forum/topic/71169-how-to-use-visual-lisp-editor/

Vì cố tình phân tích ưu điểm của N++ so với VL nên rất có thể có những nhận định trên mang tính chủ quan, thiếu chính xác và có phần thiên vị N++… Mong mọi người góp ý bổ sung thêm, đặc biệt là phân tích những ưu điểm mà VL có còn N++ thì không, để các thành viên có thể cân nhắc lựa chọn được ngôn ngữ code lisp phù hợp nhất.
Trân trọng cảm ơn!

 

Hình như bác đang hướng dẫn anh em tham khảo ở một topic khác, nhưng bác lại up line của topic này?!!

Bác viết thật nhiều điều nổi bật của N++, hành văn mạch lạc - kết cấu chặc chẽ, em sẽ cố gắng nghiên cứu từ từ. Mặc dù là một bài viết, nhưng em có cảm tưởng nó như một lưu đồ, bác dùng điều 13). Đang chờ các bạn bổ sung… để bao quát, nhằm làm bài viết không rơi vào tình trạng thiếu trường hợp mà vừa như một lời kêu gọi sự tiếp tục của mọi người. Ngoài ra, tại đoạn cuối của bài viết, bác viết thật công bằng và khiêm tốn nữa, kể như là một sự lật ngược vấn đề! Bác thật tinh tế cả trong coding lẫn writing! Học hỏi bác thật nhiều điều hay!


  • 0

#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 15 May 2013 - 10:21 PM

Thể theo yêu cầu của 1 số thành viên, tôi mạn phép tóm tắt một số tiện ích hay của Notepad++ (N++).

Bài viết này có tham khảo thêm ở topic http://www.cadviet.c...al-lisp-editor/

1). Về màu sắc:

N++ và VL đều có chức năng gán các màu sắc khác nhau cho từng kiểu dữ liệu khác nhau: string, symbol, number, comment, function… Nhờ vậy, nhìn rất trực quan. Đặc biệt, nhờ gán màu sắc khác nhau mà có thể phát hiện code sai. Ví dụ: nếu gán function là màu blue thì khi ta code tên hàm đúng nó sẽ chuyển sang màu blue, còn code tên hàm sai thì màu không chuyển. Chức năng này giữa N++ và VL có thể coi là tương đương, chỉ Notepad là không có.

Lưu ý: vì N++ được viết để code cho nhiều ngôn ngữ lập trình (Lisp, Pascal, C, Matlab…) nên các hàm lisp có sẵn trong thư viện bị thiếu. Người dùng có thể phải bổ sung nếu muốn chức năng màu sắc này hoạt động luôn đúng.

 

-> Cái này phải nói VL nhỉnh hơn N++. Các từ khoá của Lisp VL đều hỗ trợ về màu sắc cả, còn N++ do hỗ trợ thiếu hàm Lisp 1 cách trầm trọng nên rất nhiều các từ khoá là tên các của hàm không đổi màu. VL hỗ trợ viết DCL nên các từ khoá DCL viết trên VL đổi màu còn với N++ thì chưa

 

2). Về font chữ:

N++ hơn hẳn VL. VL (ở Cad2007) chỉ có mỗi 8 font chữ, trong khi ở N++ có gần như đầy đủ những font gì mà  CAD có (hay Window có?). Nhờ font chữ đa dạng nên N++ trình bày đẹp, đặc biệt là rất phù hợp để viết những dòng chú thích bằng tiếng Việt.

3). Về View:

N++ có khả năng zoom in/out, trong khi VL không có chức năng này.

4) Về khả năng Undo:

N++ có thể undo trở về đến trạng thái ban đầu lúc mới mở file, bất kể quá trình code có save nhiều lần. VL chỉ có khả năng undo về đến trạng thái đã save gần nhất, chứ không có khả năng undo về như lúc mở file. Đây có lẽ là 1 hạn chế của VL?

5). Về chức năng đánh dấu:

N++ có chức năng đánh dấu các dòng cần theo dõi ở bất kỳ vị trí nào. VL thì không có.

Không đúng. VL và N++ đều có Bookmark

6). Tính update:

Cả N++ và VL đều có tính update. Nghĩa là: khi đồng thời mở file trên N++/VL và trên 1 phần mềm khác thì nếu ở phần mềm khác bạn edit và save thì ngay sau đó ở N++/VL file sẽ được update những thay đổi.

7). Kiểm tra cặp dấu ngoặc ():

Cả N++ và VL đều có chức năng này, nhưng thể hiện bằng 2 cách khác nhau, và có vẽ như N++ tiện dụng hơn. Với N++ thì khi bạn đặt trỏ ở 1 vị trí dấu ngoặc nào đó, tương ứng dấu ngoặc kia (và cả nó) sẽ được highlight. Với VL thì phải double click. Thêm nữa, ở N++ khi đặt trỏ ở dấu ngoặc thừa nó sẽ không highlight mà chuyển qua màu khác, còn ở VL khi viết dấu ngoặc thừa nó sẽ phát ra âm thanh báo hiệu.

8). Mở nhiều file:

N++ thể hiện các file được mở bởi các tab xếp nối đuôi nhau trên đầu editor, rất dễ nhìn và dễ nhảy qua lại giữa các tab để làm việc. Trong khi VL thể hiện các file khó chịu hơn. Riêng trong menu “Window” thì chúng giống nhau.

9). Ngôn ngữ code:

N++ là ngôn ngữ để code với rất nhiều ngôn ngữ lập trình, trong đó code lisp chỉ là 1 kiểu. Riêng VL thì chỉ dùng trong Cad để code lisp mà thôi.

10). Ẩn/hiện khối:

Đây là chức năng rất hay mà N++ có nhưng VL không có. Chức năng này đặc biệt có ý nghĩa với những file lisp lớn, chứa nhiều hàm con. Nó dùng để ẩn các khối đã hoàn thành, làm cho file lisp "ngắn" hơn, dễ theo dõi hơn.

Các khối có thể gồm các đoạn code nằm trong các hàm như: defun, repeat, while, foreach, vla-for… Nói chung, khối là một hàm hoàn thành được viết trên nhiều dòng.

11). Find, Replace and Count:

* Đánh dấu chuỗi: với N++, chỉ cần bôi đen (hoặc double click) vào 1 string thì tất cả string giống nó sẽ được bôi đen đồng loạt, khiến cho việc tìm kiếm string rất trực quan. Chức năng này chưa thực sự hoàn hảo, tuy nhiên, so với VL thì nó không có chức năng này.

* Find and Replace: N++ có thể tìm và thay trên tất cả file đang mở chứ không chỉ mỗi file hiện hành. VL cũng làm được điều này nhưng cách thao tác và cách thể hiện kết quả của VL không thân thiện bằng N++.

* Count: N++ có chức năng đếm các string giống nhau. VL không có chức năng này.

Replace : cũng mang chức năng Count rồi bác. Nói VL không đếm được các  string giống nhau là không đúng

12). Về check lỗi:

VL ưu việt hơn N++ (xin xem thêm bài viết của Lyky ở trên, dù nó chưa thực sự đầy đủ).

 

 

Kết luân:

Vì cố tình phân tích ưu điểm của N++ so với VL nên rất có thể có những nhận định trên mang tính chủ quan, thiếu chính xác và có phần thiên vị N++… Mong mọi người góp ý bổ sung thêm, đặc biệt là phân tích những ưu điểm mà VL có còn N++ thì không, để các thành viên có thể cân nhắc lựa chọn được ngôn ngữ code lisp phù hợp nhất.

Trân trọng cảm ơn!

 

Bổ sung: 

 

13) Về DCL :  Dùng VL có thể cho quan sát được hộp thoại khi thiết kế giao diện, còn N++ thì không

14) Về AutoComplex: Vì hỗ trợ từ khoá về hàm Lisp thiếu trầm trọng nên AutoComplex của N++ kém hơn nhiều so với VL. VL hỗ trợ AutoComplex với tất cả các hàm, đặc biệt là vl, vla....

15) Về tìm kiếm hàm : Rõ ràng VL ưu điểm hơn N++

16) Quản lý các hàm theo project : VL sort các hàm con của Project theo tên rất dễ tìm kiếm, thích cái nào thì kích vào lôi ra và sử dụng thôi. Khi cần có thể Build và load project sử dụng nhanh chóng. Cái này chưa tìm hiểu trên N++, chắc là không có

17). .....…


  • 2

#14 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 15 May 2013 - 10:35 PM

Cám ơn lòng tốt của bác Thaistreetz nhé, trước khi giúp người khác bác làm ơn thì làm ơn cho trót, bớt chút thời gian quý báu của mình đọc lược sơ qua yêu cầu người ta phát nhé! Mà cũng có khi bác đọc rùi mà "gà mờ"?!

 

 

Tui đâu có nhờ bác dịch tựa đâu? Nếu bác có thời gian đi dịch "giúp" mọi người, mặc nhiên không cần người ta nhờ mình, thì trên diễn đàn mình nhiều lắm, kể như nick thành viên, đa số dùng ngoại ngữ ...

 

Bác mà làm quả này, chắc không sợ thất nghiệp đâu! Sẵn rãnh, dịch luôn các tựa khác trong diễn đàn, dịch luôn những meg của diễn đàn mình - hiện đang thông báo bằng tiếng Anh, như vậy thì anh chị em trên diễn đàn được nhờ và mang ơn bác lắm!

 

Ah! Mà còn một chuyện hay hơn nữa, trước khi đi "dịch giúp" người khác, bác hãy tự dịch giúp bản thân mình trước nhé! Nick của bác là: "Thaistreetz" chắc không phải là tiếng Việt rồi?! Vậy nghĩa của nó là gì vậy? Tiếng Cambodia hả? Còn câu: "IN HIM, I TRUST. THE TRUST IN MY GOD" sao bác không tự dịch giúp bản thân mình - không ngờ trên đời vẫn còn sót lại những người quên đi bản thân - toàn lo đi "giúp" người khác như bác!


Thú vị thật, bác rành nhiều sinh ngữ quá, rành cả tiếng Cam, cả tiếng Anh... , khâm phục!

Ờ, Vậy why bạn không writed nội dung topic này by English luôn thể cho hợp với tiêu đề đi, viết Vietnamese ở here làm cai what? :lol:

Buồn cười bạn, đi soi cả nickname với 1 câu slogan của người ta ra để lý sự cãi cùn. Có ai đi dịch cái tên riêng ra không hả trời!? diễn đàn có quy định về cách viết bài và đặt tiêu đề bạn đọc chưa? Người ta nhắc đúng rồi không biết tiếp thu còn bật nữa. Ai cũng như bạn thì loạn cào cào Anh với chả Việt hết à?

 

@ĐVH: Bạn đúng là thiên vị N++ quá! Để mình đòi công bằng cho VL nhé:

1) Về màu sắc: N++ nhận tên hàm hơi hâm. Phân biệt chữ in hoa và chữ thường, phải nhập đúng định dạng thì nó mới nhận. Bạn cứ thử viết "Defun" xem nó có nhận không

7) Kiểm tra cặp dấu ngoặc: Không thể nói VL hay hơn hay N++ hay hơn bởi chúng làm nhiệm vụ khác nhau. Cách kiểm tra của VL ngoài việc tìm kiếm cặp dấu ngoặc, nó còn giúp việc chon 1 đoạn code được nhanh hơn, không phải chon thủ công như N++. việc chon các đoạn code này phục vụ cho nhiều tính năng khác của VL

9) Ngôn ngữ code: Bạn nhận xét sai hoàn toàn. VL không chỉ hỗ trợ lisp, nó còn hỗ trợ C++, SQL và đặc biệt là DCL kèm với khả năng chạy thử hộp thoại ngay từ trình soạn thảo. Cái này N++ thua toàn tập nếu chỉ xét riêng lĩnh vực Lisp.

Tạm thời thế đã. Mình đang có trong tay cuốn sách Thaistreetz tự viết về trình soạn thảo VLIDE. khá nhiều điều thú vị, khi nào rảnh mình sẽ làm 1 bài so sánh VL và N++ chi tiết hơn.


  • 0

#15 Song Nhi

Song Nhi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: 52 (tàm tạm)

Đã gửi 15 May 2013 - 11:06 PM

Em xin được bổ xung thêm:
17) Khả năng dịch file *.LSP sang các định dạng: *.VLX; *.FAS... của VL mà N++ không có, nếu kết hợp cả 2 chương trình này, lấy ưu bổ khuyết như ý kiến bác nataca là hay hơn!
 
@ Chị ThuyLinh313

Tạm thời thế đã. Mình đang có trong tay cuốn sách Thaistreetz tự viết về trình soạn thảo VLIDE. khá nhiều điều thú vị, khi nào rảnh mình sẽ làm 1 bài so sánh VL và N++ chi tiết hơn.

 

Đó là ebook hay sách in vậy chị? Nếu là ebook, phiền chị có thể post ebook đó lên diễn đàn cho mọi người tham khảo có được không ạ? Em có tìm trên diễn đàn mà không thấy!


  • 0

#16 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 15 May 2013 - 11:20 PM

Các bác so sánh nhiều e e khập khiễng. Có đến mấy topic bàn về cái ni rồi

- Về các tiện ích về cách thức sử dụng, trình bày ... N++ chắc chắn sẽ có thể ăn đứt VL, đơn giản là vì N++ code mở, các bác thấy thiếu cái j thì xắn tay lên viết cho nó. Từ khóa thiếu thì thêm, k nhận in hoa thì xử, màu mè chán thì chỉnh ... nói chung là thiên biến vạn hóa, plug addin vô số ...

- Về các chức năng liên quan đến chất lượng sản phẩm, check hàng, đì búc đì biếc các thứ thì vl chuyên về nó rồi, cãi j

 

Em thì viết = N++, sửa lỗi mò, nhưng vote dùng cả 2, mở file = N++ và VL cùng lúc, qua lại chớp nhoáng, xuất chiêu nhẹ nhàng mà khí lực vô biên

 

@TL : bác Thái đường cũng hứa viết giúp mình cái tut đó, rồi mất hút ^^. Bạn làm cùng chỗ a Thái ?


  • 2

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#17 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 16 May 2013 - 08:01 AM

@Nhi: Bạn liên hệ với Thaistreetz nhé. Mình biết là bạn ấy vẫn thường xuyên vào diễn đàn.

@KX: Mình chỉ quen biết Thái thôi, do có cùng cộng tác với nhau 1 thời gian ngắn.


  • 0

#18 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 16 May 2013 - 09:42 AM

@Tue+ThuyLinh+Ketxu+...:

Mong các bạn cho thêm những ý kiến, đặc biệt là những tiện ích tốt của VL so với N++, để cuối cùng mình có thể tổng hợp lại, ngõ hầu giúp một số bạn viết lisp có phương án chọn ngôn ngữ code lisp phù hợp nhất.

Đây không phải là cuộc tranh luận "ăn thua" giữa N++ và VL, cũng như không phải là cuộc tranh luận giữa những ai đã từng yêu mến chúng. Chủ đề chỉ muốn: liệt kê, phân tích những tiện ích hay và chưa hay của từng ngôn ngữ code mà thôi.

Đối với các bạn - đã quá rành lisp - thì thậm chí viết với Notepad "trơn" cũng ngon ơ như thường, nhưng đối với nhiều người khác thì có lẽ sẽ là cần thiết.

Cám ơn và Hy vọng!


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#19 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 16 May 2013 - 03:15 PM

Thêm chức năng "thu gom rác" : biến toàn cục -> biến cục bộ

15454_vl_1.gif

 


  • 5

#20 lyky

lyky

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 126 (tàm tạm)

Đã gửi 16 May 2013 - 04:29 PM

Quản lý LISP bằng Project

Vừa tiện dụng cho Autoload, vừa tiện dụng cho Find trong VLIDE rất hiệu quả, ứng dụng cho việc test LISP bằng một project: Vault thì thật mau chóng!


22665_lyky_1.jpg
 

@ Bác Gia_Bach: Cám ơn Bác! Bác hướng dẫn bằng hình ảnh thật cụ thể và dễ hiểu, tuy nhiên, Bác đã để lại một vài “sơ xuất” lyky đã đánh dấu trên hình này nè! Lyky đã nhận ra Bác rồi?!


22665_lyky2.jpg


Một lần nữa xin cám ơn Bác đã quan tâm đến vấn đề và nhiệt tình hướng dẫn anh em! Chúc Bác thật nhiều SK và nhiều thật nhiều thành công trong công việc nữa nhé!
 
@ ThuyLinh: Tiếp thu ý kiến, hôm sau nhất định không ghi tiếng Anh nữa!


  • 2

22665_13x13progress.gif   22665_lyky.gif   22665_13x13progress.gif