Chế độ EX để xử lý hàng loạt là gì?


20

Các hướng dẫn đề cập rằng Ex-mode là dành cho xử lý hàng loạt. Vì nó là một mối phiền toái, thay vì một công cụ, đối với tôi, tôi muốn xem một số ví dụ thực tế. Ai sử dụng nó? Tại sao?

Chế độ EX để xử lý hàng loạt là gì?


@Masi: liên kết các tài khoản của bạn để các bài đăng được di chuyển sẽ được liên kết với tài khoản SU của bạn sau khi di chuyển.
Greg Hewgill

Câu trả lời:


4

Vim trong chế độ Ex (còn được gọi là ex) hữu ích khi:

  • Bạn đang cần chỉnh sửa (nhiều) tệp không tương tác (như một phần của tập lệnh).
  • Kết nối của bạn rất chậm hoặc màn hình không được cập nhật sau hành động của bạn.
  • Ánh xạ và chữ viết tắt bị vô hiệu hóa.
  • Các khóa phổ biến như Escapehoặc Controlkhông hoạt động đúng.

Chỉnh sửa các file không tương tác được sử dụng phổ biến nhất và những người sử dụng nó theo cách tương tự như sedawk, tuy nhiên họ đang được nhiều dòng định hướng - họ chỉ đọc các tập tin chuyển tiếp từ đầu đến cuối trong khi vimlà đệm theo định hướng - bạn có thể di chuyển về phía trước và lạc hậu trong tập tin như bạn muốn Biểu thức chính quy của vim thứ hai mạnh hơn biểu thức của awk và sed (chúng không được thiết kế để hoạt động với nhiều dòng) - ví dụ: vim có thể khớp với nhiều dòng và hỗ trợ không khớp.

Ex cũng là một trình soạn thảo (tiền thân trực tiếp của vi) và trong Vim - Ex Mode giả lập ex(họ vẫn chạy cùng một mã), vì vậy có thể chuyển sang chế độ lệnh extừ bên trong vi và ngược lại. Có chế độ Ex ( vim -e) và chế độ Ex được cải tiến cho phép thực hiện các lệnh nâng cao hơn chế độ Ex tương thích vi ( vim -E). Xem: Sự khác biệt giữa chế độ Ex và chế độ Ex được cải thiện là gì?

Ex là gốc của một nhóm các biên tập viên: chỉnh sửa, ex và vi. Ex là một tập hợp siêu ed, với phần mở rộng đáng chú ý nhất là một công cụ chỉnh sửa hiển thị. ví dụ (1)


ví dụ 1

Dưới đây là ví dụ đơn giản của việc thay đổi 127để 128các bạn hoststập tin và in kết quả:

ex -s +%s/127/128/g +%p +q! /etc/hosts

tương đương với:

sed s/127/128/g /etc/hosts

Đối với giải pháp nâng cao hơn, bạn có thể có tệp với các lệnh vim và sử dụng nó theo cách tiếp cận cổ điển hơn để chuyển hướng I / O:

echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts

Ví dụ 2

Bạn cũng có thể sử dụng plugin vim để thực hiện một số tác vụ.

Ví dụ: một lớp lót sau đây sẽ chuyển đổi tệp mã nguồn của bạn thành html bằng một trong các plugin tiêu chuẩn:

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c

Nó sẽ tạo tệp html (có tô sáng cú pháp) từ mã của bạn (được viết bằng bất kỳ ngôn ngữ được hỗ trợ nào) sẵn sàng để in hoặc xuất bản trên trang web của bạn.


Ví dụ 3

Hoặc một số ví dụ thực tế trực tiếp từ đặc tả RPM :

vim -E -s Makefile <<-EOF
   :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
   :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
   :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
   :update
   :quit
EOF

Ví dụ 4

Kịch bản sau đây sẽ tạo một tệp html mới bằng cách tải xuống html của trang Ví dụ và thay thế phần thân của nó bằng bảng 20x20 được tạo tự động bằng các số ngẫu nhiên trong đó:

" table.vim
%!curl -s example.com 
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq

Sử dụng:

ex -s table.html < table.vim

Điều này sẽ hoạt động trên * nix giống như các hệ thống được cài đặt curl. Thêm -Vđể xem kịch bản trong hành động.

Ví dụ khác:


Xem thêm:


22

Ex-Mode chủ yếu để thực hiện cùng một hành động trên một số tệp.

Giả sử bạn có tất cả 25 tệp .html với:

<a href="/superuser//home.html"> ...

Thay vì mở từng cái một, bạn có thể sử dụng Chế độ Ex để thay đổi tất cả thành index.html:

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF

7
Một triển khai đầy đủ và nhiều hơn nữa sẽ được thực hiện for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
trực giác

6

Kể từ phiên bản 7.3 gần đây, hỗ trợ hoàn tác liên tục, chế độ ex và các hình thức xử lý hàng loạt vim khác là vượt trội so với các phương pháp không vim khác, vì nó sẽ không ghi lại lịch sử hoàn tác.

Thêm: 'liên tục hoàn tác' nếu được bật, sẽ giữ tất cả các thay đổi đối với tệp (tối đa giới hạn) trong lịch sử hoàn tác, qua các phiên chỉnh sửa vim. Nếu tệp được chỉnh sửa bởi một chương trình bên ngoài, vim sẽ đặt lại lịch sử hoàn tác khi phát hiện bằng tổng kiểm tra rằng nó đã thay đổi. vim -E sẽ cho phép bạn chỉnh sửa hàng loạt một tệp và chỉnh sửa sẽ nằm trong lịch sử hoàn tác.


2
Điều này có vẻ khá xa vời, nhưng nó chắc chắn hợp lý và thông minh! +1
Tarrasch

1

Điều này không trả lời câu hỏi của bạn về xử lý hàng loạt, nhưng đó là một cách khác để giải thích Ex-mode là gì. Bạn biết cách bạn nhấn:để vào chế độ dòng lệnh và nhập lệnh? Chế độ Ex cũng cho phép bạn nhập các lệnh tương tự, ngoại trừ Vim không rời khỏi chế độ Ex sau khi bạn nhập lệnh, nó vẫn ở chế độ Ex và bạn có thể nhập một lệnh khác. Vì vậy, nó giống như một REPL (đọc, đánh giá, in, lặp), nhưng không có bản in (vì vậy chỉ là một ... ...). Tôi sẽ lấy lại lý do tại sao bạn có thể muốn loại REL đó sau này. Đó là lý do tại sao nó được gọi là chế độ Ex, nó cho phép bạn nhập các lệnh Ex, cũng giống như chế độ dòng lệnh, nó cho phép bạn nhập một lệnh Ex. Một cách khác để giải thích nó là cho phép bạn nhập và thực thi ngay mã Vimscript / VimL. Vimscript / VimL là ngôn ngữ bạn có thể sử dụng để ghi các plugin Vim. Đây cũng là ngôn ngữ bạn sử dụng để ghi tệp cấu hình (có thể là .vimrc) của bạn. Nó cũng là ngôn ngữ bạn đang sử dụng khi bạn nhập các lệnh Ex từ chế độ dòng lệnh hoặc chế độ Ex. Vì vậy, từ quan điểm đó, chế độ Ex có thể được xem như là một VimL REL. Tại sao bạn muốn có một VimL REL? Vì lý do tương tự, mọi người thích REPL cho các ngôn ngữ khác. Chúng có thể thực sự hữu ích cho việc gỡ lỗi mã hoặc thử nghiệm ngôn ngữ để xem mọi thứ hoạt động như thế nào, đặc biệt nếu bạn đang viết plugin trong VimL hoặc tùy chỉnh cao tệp cấu hình của bạn (điều đó có thể có nghĩa là bạn đang vi phạm hiệu trưởng SRP và sẽ phá vỡ nó thành bổ sung).


Sẽ thật tuyệt khi lấy một số ví dụ dưới dạng video để cho thấy sự hữu ích của chế độ cũ. Tôi chưa bao giờ nhận ra điều đó bởi vì tôi có thể sử dụng trình quản lý cửa sổ Linux và chế độ trực quan của vim, :!pythonv.v.
Léo Léopold Hertz
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.