Không làm gì: mở làm trong vim?


18

Tài liệu của Vim có điều này để nói về :openlệnh:

This command is in Vi, but Vim only simulates it:

                                                        *:o* *:op* *:open*
:[range]o[pen]                      Works like |:visual|: end Ex mode.
                                {Vi: start editing in open mode}

:[range]o[pen] /pattern/    As above, additionally move the cursor to the
                                column where "pattern" matches in the cursor
                                line.

Vim does not support open mode, since it's not really useful.  For those
situations where ":open" would start open mode Vim will leave Ex mode, which
allows executing the same commands, but updates the whole screen instead of
only one line.

Nó không bình luận về bản chất của "mô phỏng", và tại sao đây được coi là một mô phỏng chứ không phải là một lệnh thực sự với hành vi khác nhau. Khi chạy từ chế độ ex (Q), nó thực sự hoạt động như mô tả.

Tuy nhiên, dường như cũng có một lệnh mở khác. Khi chạy từ dòng lệnh thông thường hoặc từ chế độ ex với các đối số khác nhau, nó dường như là một từ đồng nghĩa với :edit. Khi chạy từ chế độ lệnh với a /pattern/, nó định vị con trỏ dường như chạy :edit(với vị trí con trỏ chỉ hiển nhiên nếu: chỉnh sửa không thành công.) Nó cũng có thể được chạy như :open /pattern/ file, định vị con trỏ và chạy:edit file

Câu hỏi của tôi là: Tại sao điều này không được ghi nhận? Có sự khác biệt nào :editmà tôi không nhận thấy? Đã :opentừng là một từ đồng nghĩa cho :editvà chỉ thay đổi sau đó trong một nỗ lực để nửa chừng tuân thủ POSIX?

Câu trả lời:


13

"Chế độ mở" của vi rất hữu ích cho các thiết bị đầu cuối có một dòng, chẳng hạn như thiết bị đầu cuối cứng. Ở chế độ mở, vi có "chế độ xem một dòng" của tệp. Di chuyển con trỏ xung quanh sẽ vẽ lại toàn bộ dòng và xóa các ký tự được in khác nhau.

"Mô phỏng" mà vim thực hiện chỉ đơn giản là hỗ trợ lệnh, khiến nó hoạt động (như tài liệu nói) giống như :visualvà vì :visual"nếu không giống như :edit", đó có thể là lý do tại sao bạn thấy nó hoạt động như thế nào :edit.

Từ góc độ mã nguồn, :openđược triển khai trong ex_docmd.c( ex_open()). Nó thực hiện một số nội dung để xử lý trường hợp được cung cấp biểu thức chính quy, nhưng luôn kết thúc bằng một cuộc gọi đến do_exedit().

Việc thực hiện :edit, :badd:visualđược chứa trong các ex_edit()chức năng trong cùng một tập tin, và chức năng đó là một cuộc gọi trực tiếp đến do_exedit()(không có gì khác). Do đó, khác với khi xử lý tham số biểu thức chính quy, cùng một mã được gọi. do_exedit()có một chút lông và hành vi của nó được sửa đổi rất nhiều dựa trên lệnh thực tế đã được ban hành, nhưng nó không bao giờ kiểm tra rõ ràng các mã thông báo lệnh để mở / chỉnh sửa / trực quan. Do đó, ba lệnh dẫn đến ít nhiều cùng một mã được chạy do_exedit().


8

Từ Giới thiệu về Chỉnh sửa Hiển thị với Vi :

Nếu bạn đang sử dụng thiết bị đầu cuối cứng hoặc thiết bị đầu cuối không có con trỏ có thể di chuyển khỏi dòng dưới cùng, bạn vẫn có thể sử dụng bộ lệnh vi, nhưng ở chế độ khác. Khi bạn đưa ra một lệnh vi, trình soạn thảo sẽ cho bạn biết rằng nó đang sử dụng chế độ mở. Tên này xuất phát từ lệnh mở trong ex, được sử dụng để vào cùng chế độ.

Sự khác biệt duy nhất giữa chế độ trực quan và chế độ mở là cách hiển thị văn bản.

Trong chế độ mở, trình chỉnh sửa sử dụng một cửa sổ dòng duy nhất vào tệp và di chuyển lùi và tiến trong tệp khiến các dòng mới được hiển thị, luôn ở dưới dòng hiện tại. Hai lệnh của vi hoạt động khác nhau khi mở: z và ^ R. Lệnh z không lấy tham số, mà chỉ vẽ một cửa sổ ngữ cảnh xung quanh dòng hiện tại và sau đó đưa bạn trở lại dòng hiện tại.

Nếu bạn đang ở trên một thiết bị đầu cuối cứng, lệnh ^ R sẽ gõ lại dòng hiện tại. Trên các thiết bị đầu cuối như vậy, trình soạn thảo thường sử dụng hai dòng để thể hiện dòng hiện tại. Dòng đầu tiên là một bản sao của dòng khi bạn bắt đầu chỉnh sửa nó và bạn làm việc trên dòng bên dưới dòng này. Khi bạn xóa các ký tự, trình chỉnh sửa sẽ nhập một số \ 's để hiển thị cho bạn các ký tự bị xóa. Trình chỉnh sửa cũng in lại dòng hiện tại ngay sau những thay đổi như vậy để bạn có thể thấy dòng đó trông như thế nào một lần nữa.

Đôi khi rất hữu ích khi sử dụng chế độ này trên các thiết bị đầu cuối rất chậm có thể hỗ trợ vi ở chế độ toàn màn hình. Bạn có thể làm điều này bằng cách nhập ex và sử dụng lệnh mở.

:openlà một vật phẩm có nguồn gốc từ Vim là một bản sao Vi hoàn toàn vô dụng ngày nay. Tôi chỉ có thể giả định rằng nó vẫn ở đó để tương thích POSIX.

Mặc dù tương đồng mơ hồ, :openkhông một thay thế cho :editbất kỳ căng của trí tưởng tượng.

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.