Làm cách nào để sao chép mã của Vim?


28

Mã gấp trong Emacs

Đôi khi tôi muốn gấp một khối văn bản. Trong Vim bạn có thể dễ dàng gấp mà không cần fuzz. Không cần thêm bất kỳ ký tự đặc biệt nào như "đánh dấu" hoặc regex cụ thể như thế nào {{{. Tôi muốn chọn một khu vực và gấp nó, mà không làm hỏng cấu trúc.

Khi nhìn xung quanh, có vẻ như đã có câu hỏi về việc gấp mã trong Emacs. Có người nói rằng "không có giải pháp hoàn hảo". Ví dụ: tôi đã tạo một clip về cách viết mã đơn giản trong Vim:

Vim gấp

nhập mô tả hình ảnh ở đây

+ Khá đơn giản, chọn một khu vực và gấp nó.
+ Đó là sự kiên trì. Khi bạn giết bộ đệm / đóng Vim. Và mở lại tập tin, các nếp gấp vẫn còn đó.
+ Bạn có được một thanh đánh dấu, để dễ dàng nhìn thấy những gì được gấp lại.

Có nhiều cấu hình gấp khác cho Vim. Tôi hạnh phúc với Emacs, nhưng đây là một điều mà tôi nhớ. Các lựa chọn thay thế khác mà tôi đã thử, ví dụ HideShow:

Ẩn

nhập mô tả hình ảnh ở đây

Cái ác thay thế với hide-show minor mode. Tôi thấy nó không sử dụng được:

- Tôi không thể chọn một khu vực và gấp nó. Nó gấp trên các khối mã.

- Không có thanh higlihgting hay thứ gì đó, để tham dự với bạn, nó được gấp lại. Bạn có thể dễ dàng bỏ lỡ nó.

- Nó không dai dẳng. Nếu bạn mở lại tập tin, các nếp gấp sẽ biến mất.

Có một gói khác, Gấp cái này :

Gấp cái này

nhập mô tả hình ảnh ở đây

- Đó là một thay thế khá. Tuy nhiên, nó lộn xộn với vết lõm, bởi vì văn bản dưới nếp gấp được đặt bên cạnh nếp gấp ... (?).

- Nó có thể chỉ cần chọn trực quan khu vực và gấp nó. Nhưng nó phá vỡ sự bổ sung, vì vậy tổng quan bị rối tung. Không tiện dụng lắm.

- Không có thanh higlihgting hoặc một cái gì đó, để tham dự bạn nó được gấp lại. Bạn có thể dễ dàng bỏ lỡ nó.

Vấn đề là gì?

Tôi muốn nhân rộng cách Vim gấp. Nhưng khi tôi tìm kiếm xung quanh, có vẻ như rất khó để làm điều đó trong Emacs. Vì vậy, tôi tự hỏi nếu có một cái gì đó trong emacs hoặc kiến ​​trúc của nó gây khó khăn để sao chép này? Các giới hạn là gì?


2
Tôi cảm thấy câu hỏi quá rộng, vì vậy tôi đã bỏ phiếu để đóng trên cơ sở đó. Tôi sẽ đề nghị người đăng ban đầu chọn một vài thư viện cung cấp một số tính năng được tìm kiếm, sau đó kết hợp / sửa đổi chúng theo ý muốn. Nếu OP gặp sự cố khi triển khai / sửa đổi một tính năng cụ thể , thì hãy đăng một câu hỏi cụ thể giới hạn trong một vấn đề đó. OP có thể có thể đạt được các hiệu ứng hình ảnh mong muốn, nhưng nên chuẩn bị để biến nó thành một dự án đang diễn ra để được thực hiện theo thời gian.
luật

3
Bạn có thể vui lòng giải thích những tính năng gấp bạn muốn? Theo quy định, bạn không thể mong đợi mọi người trên trang web này biết cách gấp mã Vim hoạt động và dù sao bạn cũng nên cho chúng tôi biết những tính năng bạn muốn cụ thể. Thông tin duy nhất bạn cung cấp về những gì bạn muốn là một hình ảnh động chỉ hiển thị một ví dụ và dù sao tôi cũng không biết nó minh họa gì: chúng không hiển thị những lệnh bạn đã sử dụng, tại sao bạn di chuyển con trỏ đến điểm này hoặc điểm đó, v.v. Ngoài ra, trong một trình duyệt thông thường, họ chơi trên một vòng lặp và không thể biết khi nào lặp lại bắt đầu.
Gilles 'SO- ngừng trở thành ác quỷ'

3
giữ nên được loại bỏ khỏi câu hỏi này. như nó hiện đang đứng nó là cụ thể hợp lý. không có câu trả lời cho câu hỏi không phải là lý do chính đáng để đóng nó.
Ista

2
ar-hide-area-atpt, ar-show-area-atpt từ 'thing-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utils - vui lòng hủy chặn có thể là một câu trả lời thường xuyên
Andreas Röhler

1
Câu hỏi, theo tôi hiểu, về cơ bản là: " Ai đó: Vui lòng viết toàn bộ thư viện cho Emacs sẽ cung cấp các tính năng gấp mã chính xác được tìm thấy trong Vim. " Tôi thấy từ một số ý kiến ​​và bình chọn là có đủ những người muốn thấy điều này trở thành hiện thực. Tuy nhiên, tôi không thấy làm thế nào điều này có thể phù hợp với câu trả lời - thư viện mới được đề xuất sẽ cần được duy trì, với các vấn đề và sửa lỗi. Tôi cũng không ngại ai đó viết lên toàn bộ thư viện với các tính năng mới tuyệt vời để gấp mã.
luật

Câu trả lời:


16

Hãy thử vimish-fold.

Tính năng, đặc điểm

  • bao gồm pin: kích hoạt chế độ nhỏ, liên kết một vài lệnh và mọi thứ sẽ chỉ hoạt động;

  • nó hoạt động trên các khu vực bạn chọn;

  • nó vẫn tồn tại: khi bạn đóng tập tin, các nếp gấp của bạn sẽ không biến mất;

  • Ngoài việc bền bỉ, nó có tỷ lệ tốt, bạn có thể làm việc trên hàng trăm tệp với nhiều nếp gấp mà không có tác dụng phụ;

  • rõ ràng phần nào của văn bản được gấp lại;

  • nó không phá vỡ thụt đầu dòng hoặc một cái gì đó;

  • nó có thể bán lại chỉ những nếp gấp mở ra (oh, của tôi);

  • đối với người hâm mộ của avygói: bạn có thể sử dụng avyđể gấp văn bản với số lượng phím tối thiểu!

Sử dụng

Tạo ràng buộc cho một số / tất cả các chức năng này:

  • vimish-fold - gấp cơ bản của khu vực được lựa chọn;

  • vimish-fold-unfold- bạn không thực sự cần phải ràng buộc điều này, chỉ sử dụng C-gkhi điểm được đặt trên tiêu đề đại diện cho văn bản gấp;

  • vimish-fold-unfold-all - tuy nhiên điều này có thể hữu ích;

  • vimish-fold-refold - vâng, bạn có thể gấp nó lại;

  • vimish-fold-avy- sử dụng avyđể gấp văn bản của bạn!

Bạn có thể xoay vimish-fold-modecó chọn lọc cho các chế độ mà bạn muốn có khả năng gập liên tục hoặc chỉ cần kích hoạt nó ở mọi nơi:

(vimish-fold-global-mode 1)

Bạn có bất kỳ ràng buộc quan trọng đề nghị? Những ràng buộc nào bạn sử dụng khi bạn ở chế độ C ++? Chế độ C? Chế độ Python? Chế độ Lisp? Chế độ ELisp? Chế độ JavaScript?
Reb.Cabin

1
@ Reb.Cabin, đây không phải là gói dành riêng cho chế độ, vì vậy các ràng buộc khóa toàn cầu là lựa chọn tốt nhất. Tôi đang sử dụng các ràng buộc chính không liên quan đến hợp âm phím và hầu hết mọi người sẽ coi chúng hơi lạ, hiện tại tôi có: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. Hầu hết các keybind của tôi đều như thế này, đây là cấu hình của tôi .
Đánh dấu Karpov

Điều này có tích hợp với các chuyển động xấu và textobjects?
PythonNut

1
Hừm ... Tôi sẽ bắt đầu làm PR.
PythonNut

1
Tôi, cho một, tìm vimish-gấp hoàn toàn không thể sử dụng. Có lẽ nó trực quan với những người đã quen thuộc với việc gấp mã trong vim ... Tôi không biết. Ngoài ra, tôi không hiểu tại sao việc gấp trong chế độ org lại hoạt động tốt như vậy, nhưng Emacs vẫn chưa có khả năng gấp mã tốt ...
kjo
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.