Các lệnh / phím bấm vim được sử dụng nhiều nhất là gì?


111

Tôi là một lập trình viên Ruby đang cố gắng chuyển từ Textmate sang MacVim và tôi gặp khó khăn khi lướt qua danh sách khổng lồ những thứ bạn có thể làm trong VIM và tất cả các lần nhấn phím cho chúng. Tôi mệt mỏi khi nghe "Bạn có thể sử dụng 'I' để chèn văn bản hoặc 'a' để thêm văn bản sau ký tự hoặc 'A' để thêm văn bản ở cuối dòng, hoặc ..." Tôi không thể tưởng tượng được mọi người sử dụng tất cả 20 lần nhấn phím khác nhau để điều hướng văn bản, 10 phím hoặc hơn để bắt đầu thêm văn bản và 18 cách để chọn một khối bên trong một cách trực quan. Hay bạn !?

Bảng gian lận lý tưởng của tôi sẽ là 30-40 phím bấm hoặc lệnh được sử dụng nhiều nhất mà mọi người sử dụng để viết mã hàng ngày, cùng với các plugin thiết yếu tuyệt đối mà rubyists sử dụng hàng ngày và 10 lệnh được sử dụng nhiều nhất cho chúng. Về lý thuyết, một khi tôi có điều đó và bắt đầu trở nên như thành thạo trong VIM như tôi đang ở Textmate, sau đó tôi có thể bắt đầu học hàng ngàn lệnh VIM khác mà sẽ làm cho tôi nhiều hiệu quả.

Hay tôi đang học VIM hoàn toàn sai cách?


9
Tham khảo bắt buộc đến cafepress.com/geekcheat.11507711 .
geekosaur

1
Được gắn thẻ lại để xóa 'ruby' và thêm 'phím tắt'. Có vẻ thích hợp hơn.

"Tôi có đang học Vim hoàn toàn sai cách không?" - nah, bạn chỉ cần bắt đầu với một số điều cơ bản, và hãy nhớ rằng bạn vẫn sẽ học thêm lệnh một năm kể từ bây giờ. Có thể một ngày nào đó bạn thực sự sẽ sử dụng tất cả các lệnh! Nhưng không ai sử dụng tất cả chúng ngay từ ngày đầu tiên.
Cascabel

Câu trả lời:


305

Đây là một bảng mẹo tôi đã viết một lần, với các lệnh tôi thực sự sử dụng thường xuyên:

Người giới thiệu

Chung

  • Gần như tất cả các lệnh có thể được đặt trước một số để đếm lặp lại. ví dụ. 5dd xóa 5 dòng
  • <Esc> đưa bạn thoát khỏi bất kỳ chế độ nào và quay lại chế độ lệnh
  • Các lệnh đứng trước : được thực thi trên dòng lệnh ở cuối màn hình
  • : help help với bất kỳ lệnh nào

dẫn đường

  • Di chuyển con trỏ: ← hjk l →
  • Bằng chữ:
    • w từ tiếp theo (bằng dấu câu); W từ tiếp theo (bởi dấu cách)
    • b trở lại từ (bằng dấu câu); B từ trở lại (bởi dấu cách)
    • e kết thúc từ (bằng dấu câu); E kết thúc từ (bởi dấu cách)
  • Theo dòng:
    • 0 đầu dòng; ^ đầu tiên không phải khoảng trắng
    • $ cuối dòng
  • Theo đoạn:
    • { dòng trống trước đó; } dòng trống tiếp theo
  • Theo tệp:
    • gg bắt đầu tệp; G cuối tệp
    • 123G chuyển đến số dòng cụ thể
  • Bằng điểm đánh dấu:
    • mx đặt dấu x ; 'x đến đánh dấu x
    • '. đi đến vị trí của lần chỉnh sửa cuối cùng
    • '' Quay trở lại điểm cuối cùng trước khi nhảy
  • Di chuyển:
    • ^ F chuyển tiếp toàn màn hình; ^ B lùi toàn màn hình
    • ^ D xuống nửa màn hình; ^ U lên nửa màn hình
    • ^ E cuộn lên một dòng; ^ Y cuộn xuống một dòng
    • dòng con trỏ trung tâm zz

Chỉnh sửa

  • bạn hoàn tác; ^ R làm lại
  • . lặp lại lệnh chỉnh sửa cuối cùng

Chèn

Tất cả các lệnh chèn được kết thúc bằng <Esc>để trở về chế độ lệnh.

  • tôi chèn văn bản vào con trỏ; Tôi chèn văn bản ở đầu dòng
  • một văn bản append sau con trỏ; Một văn bản append sau cuối dòng
  • o mở dòng mới bên dưới; O mở dòng mới ở trên

Thay đổi

  • r thay thế ký tự đơn; R thay thế nhiều ký tự
  • s thay đổi ký tự đơn
  • cw thay đổi từ; C thay đổi đến cuối dòng; cc thay đổi toàn bộ dòng
  • c<motion> thay đổi văn bản theo hướng chuyển động
  • ci ( thay đổi bên trong dấu ngoặc đơn (xem lựa chọn đối tượng văn bản để biết thêm ví dụ)

Xóa

  • x xóa ký tự
  • dw xóa từ; D xóa đến cuối dòng; dd xóa toàn bộ dòng
  • d<motion> xóa theo hướng chuyển động

Cắt và dán

  • yy sao chép dòng vào bộ đệm dán; đường cắt dd vào bộ đệm dán
  • p dán bộ đệm bên dưới dòng con trỏ; P dán bộ đệm phía trên dòng con trỏ
  • xp hoán đổi hai ký tự ( x để xóa một ký tự, sau đó p để đặt lại sau vị trí con trỏ)

Khối

  • v luồng khối trực quan; Vạch tạo khối thị giác; ^ V cột khối trực quan
    • hầu hết các lệnh chuyển động mở rộng khối đến vị trí con trỏ mới
    • o di chuyển con trỏ đến đầu kia của khối
  • d hoặc x cắt khối vào bộ đệm dán
  • y sao chép khối vào bộ đệm dán
  • > khối thụt lề; < khối unindent
  • gv chọn lại khối hình ảnh cuối cùng

Toàn cầu

  • :% s / foo / bar / g thay thế tất cả các lần xuất hiện của "foo" thành "bar"
    • % là một phạm vi cho biết mọi dòng trong tệp
    • / g là cờ thay đổi tất cả các lần xuất hiện trên một dòng thay vì chỉ lần đầu tiên

Đang tìm kiếm

  • / tìm kiếm về phía trước; ? tìm kiếm ngược
  • * tìm kiếm từ dưới con trỏ; # tìm kiếm ngược cho từ dưới con trỏ
  • n trận đấu tiếp theo theo cùng một hướng; N trận tiếp theo theo hướng ngược lại
  • fx chuyển tiếp đến ký tự tiếp theo x ; Fx lùi về ký tự x trước đó
  • ; di chuyển một lần nữa đến cùng một ký tự theo cùng một hướng; , di chuyển lại đến cùng một ký tự theo hướng ngược lại

Các tập tin

  • : w ghi tệp vào đĩa
  • : wname ghi tệp vào đĩa dưới dạngname
  • ZZ ghi tệp vào đĩa và thoát
  • : n chỉnh sửa một tệp mới; : n! chỉnh sửa tệp mới mà không lưu các thay đổi hiện tại
  • : q bỏ chỉnh sửa tệp; : q! bỏ chỉnh sửa mà không lưu thay đổi
  • : e chỉnh sửa lại file đó (nếu thay đổi bên ngoài vim)
  • : e. trình khám phá thư mục

các cửa sổ

  • ^ Wn cửa sổ mới
  • ^ Wj xuống cửa sổ tiếp theo; ^ Chuyển đến cửa sổ trước
  • ^ W_ tối đa hóa cửa sổ hiện tại; ^ W = làm cho tất cả các cửa sổ có kích thước bằng nhau
  • ^ W + tăng kích thước cửa sổ; ^ W- giảm kích thước cửa sổ

Điều hướng nguồn

  • % nhảy đến phù hợp với dấu ngoặc đơn / dấu ngoặc nhọn / dấu ngoặc nhọn hoặc khối ngôn ngữ nếu mô-đun ngôn ngữ được tải
  • gd đi đến định nghĩa của ký hiệu cục bộ dưới con trỏ; ^ O trở lại vị trí cũ
  • ^] nhảy đến định nghĩa của ký hiệu toàn cục (yêu cầu tagstệp); ^ T quay trở lại vị trí cũ (duy trì chồng vị trí tùy ý)
  • ^ N (ở chế độ chèn) hoàn thành từ tự động

Hiển thị các thay đổi cục bộ

Vim có một số tính năng giúp bạn dễ dàng đánh dấu các dòng đã được thay đổi từ phiên bản cơ sở trong điều khiển nguồn. Tôi đã tạo một tập lệnh vim nhỏ giúp việc này trở nên dễ dàng: http://github.com/ghewgill/vim-scmdiff


1
+1 Tương đối tối thiểu, mặc dù tôi phải thừa nhận rằng tôi không thấy mình sử dụng bất kỳ lệnh cửa sổ nào hoặc điều hướng bằng bất kỳ thứ gì khác ngoài các phím mũi tên / pageup / pagedown / home / end và gg / G. Ồ, và để điều hướng số dòng, bạn cũng có thể sử dụng: 123 (chế độ lệnh).

2
Cheatsheet đẹp. Tôi muốn thêm ^ w ^ w để chuyển qua các cửa sổ ,: x thay vì ZZ để nhất quán, tx tiến trước ký tự và Tx lùi lại.
romainl

Tôi nên lưu ý rằng đây chỉ là những điều cơ bản về những gì tôi sử dụng. Tôi đã tạo danh sách này như một công cụ để dạy khí lực cho người khác. Tôi sử dụng nhiều lệnh khác ít thường xuyên hơn và cũng có nhiều bí danh và macro được thiết lập để giúp tôi sử dụng vim hiệu quả hơn.
Greg Hewgill

2
Nếu bạn muốn tránh Esckhóa (và RSI?), Bạn có thể sử dụng ^[. ^ccũng hoạt động (nhưng không mở rộng chữ viết tắt). Nguồn: vim.wikia.com/wiki/Avoid_the_escape_key
Lian

22

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Đây là điều tuyệt vời nhất đối với việc học VIM.


Tôi chưa bao giờ thấy điều này trước đây, tham khảo rất thú vị sau khi bạn biết các lệnh làm gì.
amccormack

3
Tuy nhiên, phần "đồ họa" sẽ vô dụng nếu bạn không có bàn phím qwerty.
romainl

5
Nó làm tôi ngạc nhiên rằng đăng một liên kết (mà đã được đăng lên cái chết đã btw) bốc thăm là nhiều sự chú ý này trong khi đi những dặm thêm áp phích khác được đắp vào không ...
Lieven Keersmaekers

Người chiến thắng rõ ràng trong các bài đăng vim: stackoverflow.com/questions/1218390/…
Justin Thomas


4

Bạn đã xem qua phần hướng dẫn có sẵn của Vim chưa? Nếu không, hãy xuống dòng lệnh và nhập vimtutor. Đó là một cách tuyệt vời để học các lệnh ban đầu.

Vim có độ linh hoạt và sức mạnh đáng kinh ngạc, nếu bạn giống như hầu hết người dùng vim, bạn sẽ học được rất nhiều lệnh mới và quên đi những lệnh cũ, sau đó học lại chúng. Trợ giúp tích hợp rất tốt và đáng để duyệt định kỳ để tìm hiểu những thứ mới.

Có một số Câu hỏi Thường gặp và Cheatsheets tốt cho vim trên internet. Tôi khuyên bạn nên tìm kiếm cho vim + faqvim + cheatsheet. Cheat-Sheets.org # vim là một nguồn tốt, cũng như wiki Mẹo Vim .


Tôi vừa phát hiện ra điều đó và rất may là nó đã được cài đặt trên máy Mac. Đang dùng thử ngay bây giờ (lúc 1 giờ sáng…)
Clinton

Tôi đã sử dụng vim trong một thời gian dài và nó là một trong những thứ đầu tiên tôi cài đặt trên máy. MacVim , trên Mac OS rất hay. Tôi có xu hướng biên dịch vim từ nguồn trên hầu hết các hộp Linux mà tôi sử dụng, đơn giản bởi vì hầu hết các bản phân phối không hiện hành hoặc không được cài đặt hỗ trợ ngôn ngữ phù hợp. Tôi giữ một phiên bản hiện tại của tôi ~/.vimrc, ~/.gvimrc~/.vimthư mục trong một tar-bóng khi tôi phải thiết lập cái gì đó lên. Sao chép và giải nén các tệp đó cho phép tôi có vim chạy với tất cả các lệnh thông thường và các colorchemes thông thường của tôi trong vài phút trên Windows, Mac và Linux.
the Tin Man

3

Điều mà hầu hết mọi người làm là bắt đầu với những điều cơ bản để trần, giống như có lẽ i, yw, yy, và p. Bạn có thể tiếp tục sử dụng các phím mũi tên để di chuyển xung quanh, chọn văn bản bằng chuột, sử dụng menu, v.v. Sau đó, khi có điều gì đó làm chậm bạn, bạn tìm kiếm cách nhanh hơn để làm điều đó và dần dần thêm nhiều lệnh hơn. Bạn có thể học một lệnh mới mỗi ngày trong một thời gian, sau đó nó sẽ nhỏ giọt đến một lệnh mỗi tuần. Bạn sẽ cảm thấy khá hiệu quả trong một tháng. Sau một năm, bạn sẽ có một bản nhạc khá vững chắc, và sau 2-3 năm, bạn thậm chí sẽ không còn ý thức được ngón tay mình đang gõ gì, và sẽ trông thật kỳ cục nếu bạn phải đánh vần nó cho ai đó. Tôi học vi vào năm 1993 và vẫn chọn 2 hoặc 3 lệnh mới mỗi năm.


3

Cheatsheet của @Greg Hewgill rất hay. Tôi đã bắt đầu chuyển đổi từ TextMate vài tháng trước. Bây giờ tôi làm việc hiệu quả như khi làm việc với TM và không ngừng ngạc nhiên trước sức mạnh của Vim.

Đây là cách tôi chuyển đổi . Có lẽ nó có thể hữu ích cho bạn.

Grosso modo, tôi không nghĩ rằng đó là một ý tưởng tốt để thực hiện một chuyển đổi triệt để. Vim rất khác biệt và tốt nhất là bạn nên đi theo từng bước.

Và để trả lời câu hỏi phụ của bạn, vâng, tôi sử dụng tất cả các iaIAoOngày để vào chế độ chèn. Nó chắc chắn có vẻ kỳ lạ lúc đầu nhưng bạn không thực sự nghĩ về nó sau một thời gian.

Một số lệnh cực kỳ hữu ích cho bất kỳ tác vụ liên quan đến lập trình nào:

  • rRđể thay thế các ký tự
  • <C-a><C-x>để tăng và giảm số
  • citthay đổi nội dung của một thẻ HTML, và các biến thể của nó ( cat, dit, dat, ci(, vv)
  • <C-x><C-o>(được ánh xạ tới ,,) để hoàn thành toàn diện
  • lựa chọn khối trực quan với <C-v>
  • và như thế…

Một khi bạn đã quen với cách Vim, bạn sẽ rất khó để không nhấn ohoặc xluôn luôn chỉnh sửa văn bản trong một số trình soạn thảo hoặc trường văn bản khác.


2

Tôi không thể tưởng tượng mọi người sử dụng tất cả 20 lần nhấn phím khác nhau để điều hướng văn bản, 10 phím hoặc hơn để bắt đầu thêm văn bản và 18 cách để chọn một khối bên trong một cách trực quan. Hay bạn !?

Tôi làm.

Về lý thuyết, một khi tôi có điều đó và bắt đầu trở nên thành thạo VIM như tôi trong Textmate, thì tôi có thể bắt đầu học hàng nghìn lệnh VIM khác sẽ giúp tôi làm việc hiệu quả hơn.

Đó là cách làm đúng. Bắt đầu với các lệnh cơ bản và sau đó chọn các lệnh giúp cải thiện năng suất của bạn. Tôi thích theo dõi blog này để biết các mẹo về cách cải thiện năng suất của tôi với vim.


2

tuxfiles.org nắm giữ một bảng gian lận khá tốt. Tôi nghĩ rằng có một số điểm để học các lệnh:

  • Thường xuyên đọc cheat sheet. Đừng lo lắng về việc sử dụng tất cả chúng hoặc nhớ tất cả các phím, chỉ cần biết rằng lệnh tồn tại. Tra cứu lệnh và sử dụng nó khi bạn thấy mình làm điều gì đó lặp đi lặp lại.
  • Nếu bạn thấy mình thường xuyên làm việc gì đó (như xóa toàn bộ dòng sau một ký tự cụ thể d$), hãy tìm kiếm nhanh trên google để xem liệu bạn có thể tìm thấy lệnh cho nó hay không.
  • Viết ra các lệnh bạn nghĩ rằng bạn sẽ thấy hữu ích và giữ danh sách đó ở nơi bạn có thể nhìn thấy nó trong khi viết mã của mình. Tôi sẽ phản đối việc in một thứ gì đó ra ngoài và thay vào đó khuyến khích bạn sử dụng ghi chú đăng nó cho một vài lệnh cùng một lúc.
  • Nếu có thể, hãy xem các lập trình viên khác sử dụng vim và hỏi họ xem họ đang sử dụng lệnh nào khi bạn thấy họ làm điều gì đó thú vị.

Bên cạnh những lời khuyên này, có một số khái niệm cơ bản bạn nên hiểu.

  • vim sẽ sử dụng cùng một ký tự để đại diện cho cùng một chức năng. Ví dụ, để xóa một dòng sau khi sử dụng ký tự d$. Để đánh dấu một dòng sau khi sử dụng một ký tự cụ thể v$. Vì vậy, hãy chú ý rằng $bạn sẽ làm gì đó ở cuối dòng từ vị trí con trỏ của bạn hiện đang ở.
  • uđang hoàn tác và ctrl+rđang làm lại.
  • đặt một số trước một lệnh sẽ thực thi lệnh đó nhiều lần. 3ddsẽ xóa dòng mà con trỏ của bạn đang bật và hai dòng tiếp theo, tương tự 3yysẽ sao chép dòng mà con trỏ của bạn đang bật và hai dòng tiếp theo.
  • hiểu làm thế nào để điều hướng qua bộ đệm sử dụng :lsđể liệt kê các bộ đệm, và :bn, :bpđể luân chuyển chúng.
  • đọc qua hướng dẫn được tìm thấy trong:help Đây có lẽ là cách tốt nhất để 'học các sợi dây', và phần còn lại của các lệnh bạn sẽ học qua cách sử dụng.

2

Đặt tệp này vào .bashrc của bạn để mở vim với tệp được chỉnh sửa lần cuối ở dòng chỉnh sửa cuối cùng

alias vil="vim  +\"'\"0"

1

Chuyển đến Chỉnh sửa hiệu quả với vim và tìm hiểu những gì bạn cần để bắt đầu. Không phải mọi thứ trên trang đó đều cần thiết khi bắt đầu, vì vậy hãy chọn những gì bạn muốn.

Từ đó, sử dụng vim cho mọi thứ. "hjkl", "y" và "p" sẽ giúp bạn có một chặng đường dài, ngay cả khi đó không phải là cách hiệu quả nhất. Khi bạn gặp phải một nhiệm vụ mà bạn không biết chìa khóa thần kỳ để thực hiện nó một cách hiệu quả (hoặc hoàn toàn), và bạn thấy mình đã làm nó nhiều lần, hãy tra cứu nó. Từng chút một nó sẽ trở thành bản chất thứ hai.

Tôi thấy vim làm nản lòng nhiều mặt trăng trước đây (trở lại khi nó không có chữ "m" ở cuối), nhưng chỉ mất khoảng một tuần sử dụng ổn định để đạt được hiệu quả. Tôi vẫn thấy nó là trình soạn thảo nhanh nhất để hoàn thành công việc.


Liên kết đến "Chỉnh sửa hiệu quả với vim" hiện đã chết. Tôi nghĩ rằng một sự thay thế có thể được tìm thấy tại robertames.com/files/vim-editing.html
Damian Powell
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.