Chỉnh sửa khối * trực tiếp * trong Emacs hoặc Vim


9

jEdit hỗ trợ chỉnh sửa khối, nhưng Emacs và Vim dường như có một số vấn đề về khả năng sử dụng nghiêm trọng trong cùng một chủ đề. Nếu ai đó có thể điền vào những điều chưa biết ở đây, việc sử dụng một trong hai trình soạn thảo sẽ dễ chịu hơn nhiều:

  • Lựa chọn hình chữ nhật thực tế : Trong đó lựa chọn trên màn hình là hình chữ nhật, không phải là lựa chọn tuyến tính mà sau đó được sử dụng để tính toán một vùng vì Emacs dường như bị giới hạn.
    • jEdit: Giữ Ctrlvà chọn.
    • Vim: Nhấp Ctrl-vvà chọn.
    • Emacs: Không rõ ; Có vẻ như một plugin hơn 400 dòng là cần thiết.
  • Chỉnh sửa hình chữ nhật trực tiếp : Xem kết quả sẽ như thế nào trên tất cả các dòng khi bạn chỉnh sửa sau khi chọn khối.
    • jEdit: Chỉ cần bắt đầu nhập và bạn sẽ thấy kết quả cuối cùng khi bạn đi.
    • Vim: Nhấp Shift-ivà gõ. Sẽ chỉ hiển thị kết quả cuối cùng trên dòng đầu tiên cho đến khi bạn nhấn Escđể thoát chế độ chèn. Không biết có cách nào để xem kết quả trên tất cả các dòng ngay lập tức.
    • Emacs: Không rõ ; có vẻ như cách duy nhất là C-x r tvà thiết lập văn bản để điền vào sau khi nhấn Ret.
  • Lựa chọn bắt đầu và kết thúc ở các vị trí bên ngoài văn bản : Ví dụ: tôi muốn xóa N ký tự đầu tiên của mỗi dòng, nhưng dòng đầu tiên và dòng cuối chứa ít hơn N ký tự.
  • Dán khối nội tuyến : Dán khối đã sao chép như thể bạn đang dán nhiều dòng, như trong, đẩy văn bản đã ở đó xuống , không đúng.
    • jEdit: Mặc định. Để dán một khối dưới dạng một khối, trước tiên bạn cần thực hiện lựa chọn khối khác.
    • Vim : OEscVp.
    • Emacs: Không biết .

Chức năng lựa chọn khối Emacs chung có thể được tìm thấy trong cua-modeplugin .


Rõ ràng chế độ chỉnh sửa cột của Emacs có thể thực hiện một số loại chỉnh sửa hình chữ nhật trực tiếp: youtube.com/watch?v=k-6BVjlBSVo
Tom

Chỉ cần quan sát về emacs 400+ "plugin" .. Một addon tương tự cho gedit, được gọi là multi-edit có hơn 1000 dòng mã python. Đối với tôi, pugin rất hữu ích (làm thế nào tôi sống sót mà không có nó), kích thước mang tính học thuật ... và nếu emacs hoạt động như quảng cáo, tôi sẽ rất vui khi sử dụng nó, nhưng tôi đã gặp lỗi tải khi tôi chạy nó "tên-line-normalize-file-name: Args ngoài phạm vi:" ", 1" :( ... Đó chỉ là những gì tôi đang tìm kiếm quá ..
Peter.O

4
Đối với những người chưa sử dụng jEdit, vui lòng giải thích thuật ngữ của bạn. Tôi không hiểu ý nghĩa của sống trực tiếp trên mạng ở đây, ý nghĩa của việc chỉnh sửa hình chữ nhật trực tiếp của Cameron là gì
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


7

Tôi có thể trả lời cho Vim, nhưng không phải Emacs.

Bắt đầu và kết thúc lựa chọn ở các vị trí bên ngoài văn bản:

:set virtualedit=blocksẽ kích hoạt hành vi bạn muốn. Bạn có thể thả dấu hai chấm ban đầu và thêm nó vào .vimrc nếu bạn muốn. Để biết thêm thông tin, :help 'virtualedit'từ trong Vim.

Dán khối nội tuyến:

Nếu bạn chỉ nhấn ptrong chế độ Lệnh, Vim sẽ chèn khối, đẩy các ký tự sang phải trên mỗi dòng. Nếu bạn chọn một khối khác và nhấn p, Vim sẽ thay thế khối đó bằng khối đã dán.

Bạn có thể dán một khối "theo chiều dọc" với chuỗi phím chế độ lệnh OEscVp. Thao tác này sẽ chèn một dòng phía trên dòng hiện tại ( O Esc), chọn nó theo dòng ( V), sau đó dán lên trên dòng ( p). Bạn có thể rút ngắn điều này thành (ví dụ) ypvới một ánh xạ như :nmap yp O<Esc>Vp- gõ theo nghĩa đen; sử dụng năm tổ hợp phím <Esc>thay vì nhấn phím Escape.


Mẹo hay về virtualedit; phải thử mà Về dán nội tuyến, vui lòng xem câu hỏi cập nhật để biết mô tả về chức năng dự kiến.
l0b0

Tôi đã cập nhật câu trả lời của mình bằng một phương pháp để dán các khối theo chiều dọc.
Jander

5

Ví dụ: tôi muốn xóa N ký tự đầu tiên của mỗi dòng, nhưng dòng đầu tiên và dòng cuối chứa ít hơn N ký tự.

Emacs: bắt đầu lựa chọn ở dòng đầu tiên và chỉ cần thêm số ký tự bị thiếu (ví dụ khoảng trắng) vào dòng cuối cùng và sau đó sử dụng kill-hình chữ nhật

Ngoài ra, xem artist-modehoặc picture-modecho phép bạn tự do di chuyển trong cửa sổ bất kể độ dài dòng.

Dán khối nội tuyến

Emacs: Đầu tiên lưu khối bằng cách giết hình chữ nhật hoặc lưu nó vào một thanh ghi, sau đó đi đến điểm chèn, sử dụng xóa hình chữ nhật và sau đó chèn hình chữ nhật đã lưu.

Có vẻ như một plugin hơn 400 dòng là cần thiết

Trong trường hợp của Emacs tại sao nó là một vấn đề? Một plugin có thể được biên dịch và triết lý của emacs là bạn không đặt mọi thứ vào cốt lõi, mà sử dụng các plugin để mở rộng trình chỉnh sửa.


4

'chế độ cua' đi kèm với Emacsen 22.1 trở lên hoặc theo liên kết để tải xuống cho các phiên bản trước của Emacs. Có một đoạn video ngắn giới thiệu chức năng.

Đối với các lệnh hình chữ nhật chung, hãy thử đọc hướng dẫn , cung cấp một giới thiệu dễ dàng.


emacs có cua-modevẻ tốt! +1 .. Tôi không thể tìm thấy video bạn đã đề cập, hãy xem liên kết của Tom trong các nhận xét ngay bên dưới câu hỏi, để biết liên kết đến video thông tin (khác nhau?) ...
Peter.O

Ooops @fered, lỗi cắt / dán, đã sửa.
Trey Jackson

0

Trong vim, cách điển hình để xóa n ký tự đầu tiên là làm một cái gì đó như thế nào :%s/.\{0,6\}//.

%sẽ làm toàn bộ tài liệu; bạn có thể thay thế bằng một lựa chọn hoặc bằng các dòng thực tế bạn quan tâm. Các slệnh là để "thay thế". Nó sẽ thay thế một biểu thức thông thường bằng bất cứ thứ gì bạn đưa ra và nó sẽ chỉ khớp một lần trên mỗi dòng trừ khi bạn thêm một tùy chọn cụ thể. Đây /là một dấu phân cách - đây có thể là bất kỳ ký tự nào, nhưng /thường được sử dụng trừ khi sử dụng thứ khác có lợi (vì vậy bạn không phải thoát /trong phần còn lại của lệnh). Đối số sau dấu phân cách đầu tiên là một biểu thức chính quy sẽ được sử dụng để tìm các chuỗi khớp trong lựa chọn của bạn. Đối số sau dấu phân cách thứ hai là những gì trận đấu sẽ được thay thế bằng.

Vì vậy, lệnh này cho biết tìm 0 đến 6 trường hợp của bất kỳ ký tự nào và thay thế chúng bằng không có gì.


Không phải những gì tôi yêu cầu.
l0b0

Nhưng bạn có nghĩ rằng nó không hữu ích cho những người tìm thấy câu hỏi này? Tôi nghĩ đó là, và đó là lý do tại sao tôi đặt nó ở đây.
Shawn J. Goff
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.