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ì?
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ì?
Câu trả lời:
Vim trong chế độ Ex (còn được gọi là ex
) hữu ích khi:
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ư sed
và awk
, 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 vim
là đệ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 ex
từ 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)
Dưới đây là ví dụ đơn giản của việc thay đổi 127
để 128
các bạn hosts
tậ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
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.
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
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:
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
for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done
.
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.
Đ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).
:!python
v.v.