├── .gitignore
├── .powenv.sample
├── .rspec
├── .ruby-version
├── Gemfile
├── Gemfile.lock
├── Procfile
├── README.rdoc
├── README.zh-TW.rdoc
├── Rakefile
├── app
├── assets
│ ├── images
│ │ └── rails.png
│ ├── javascripts
│ │ ├── application.js
│ │ ├── bootstrap.js.coffee
│ │ └── vim_command.js.coffee
│ └── stylesheets
│ │ ├── application.css
│ │ ├── bootstrap_and_overrides.css.less
│ │ └── vim_command.css.scss
├── controllers
│ ├── application_controller.rb
│ └── vim_command_controller.rb
├── helpers
│ ├── application_helper.rb
│ └── vim_command_helper.rb
├── mailers
│ └── .gitkeep
├── models
│ ├── .gitkeep
│ ├── mode.rb
│ └── vim_command.rb
└── views
│ ├── layouts
│ └── application.html.haml
│ └── vim_command
│ └── index.html.haml
├── bin
├── bundle
├── rails
├── rake
├── rspec
├── setup
└── spring
├── config.ru
├── config
├── application.rb
├── boot.rb
├── database.yml
├── environment.rb
├── environments
│ ├── development.rb
│ ├── production.rb
│ └── test.rb
├── initializers
│ ├── assets.rb
│ ├── backtrace_silencers.rb
│ ├── cookies_serializer.rb
│ ├── filter_parameter_logging.rb
│ ├── generators.rb
│ ├── inflections.rb
│ ├── mime_types.rb
│ ├── secret_token.rb
│ ├── session_store.rb
│ └── wrap_parameters.rb
├── locales
│ ├── en.bootstrap.yml
│ └── en.yml
├── routes.rb
├── secrets.yml
└── unicorn.rb
├── db
├── migrate
│ ├── 20120413194952_create_modes.rb
│ ├── 20120413195006_create_vim_commands.rb
│ ├── 20120414050328_add_language_to_vim_commands.rb
│ ├── 20120414051201_update_index_to_vim_commands.rb
│ └── 20120416214136_change_mode_id.rb
├── schema.rb
└── seeds.rb
├── doc
└── README_FOR_APP
├── lib
├── assets
│ └── .gitkeep
└── tasks
│ ├── .gitkeep
│ ├── cron.rake
│ ├── fix_mode_of_new_jp.rake
│ ├── insert_cn.rake
│ ├── insert_en.rake
│ ├── insert_new_jp.rake
│ ├── insert_submode_jp.rake
│ ├── insert_tw.rake
│ ├── update_current_jp.rake
│ └── update_language.rake
├── log
└── .gitkeep
├── public
├── 404.html
├── 422.html
├── 500.html
├── favicon.ico
└── robots.txt
├── script
├── format.rb
└── rails
├── spec
├── features
│ └── web_pages_spec.rb
├── models
│ └── vim_command_spec.rb
└── spec_helper.rb
└── vendor
├── assets
├── javascripts
│ └── .gitkeep
└── stylesheets
│ └── .gitkeep
└── plugins
└── .gitkeep
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 | #
3 | # If you find yourself ignoring temporary files generated by your text editor
4 | # or operating system, you probably want to add a global ignore instead:
5 | # git config --global core.excludesfile ~/.gitignore_global
6 |
7 | # Ignore bundler config
8 | /.bundle
9 |
10 | # Ignore the default SQLite database.
11 | /db/*.sqlite3
12 |
13 | # Ignore all logfiles and tempfiles.
14 | /log/*.log
15 | /tmp
16 | .env
17 |
18 | .powenv
19 | /config/heroku.yml
--------------------------------------------------------------------------------
/.powenv.sample:
--------------------------------------------------------------------------------
1 | export twitter_consumer_key_jp=(please set)
2 | export twitter_consumer_secret_jp=(please set)
3 | export twitter_oauth_token_jp=(please set)
4 | export twitter_oauth_token_secret_jp=(please set)
5 |
--------------------------------------------------------------------------------
/.rspec:
--------------------------------------------------------------------------------
1 | --colour
2 |
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | 2.2.1
2 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | ruby "2.2.1"
4 |
5 | gem 'rails', '4.2.0'
6 |
7 | gem "twitter-bootstrap-rails"
8 | gem 'twitter', '~> 5.8.0'
9 | gem "unicorn"
10 | gem "haml", ">= 3.0.0"
11 | gem "haml-rails"
12 | gem "jquery-rails"
13 |
14 | gem 'sass-rails', '~> 4.0.3'
15 | gem 'coffee-rails', '~> 4.0.1'
16 | gem 'uglifier', '>= 1.3.0'
17 | gem 'less-rails'
18 | gem 'therubyracer'
19 |
20 | group :production do
21 | gem 'pg'
22 | gem 'rails_12factor'
23 | end
24 |
25 | group :development do
26 | gem 'spring'
27 | gem 'spring-commands-rspec'
28 | end
29 |
30 | group :development, :test do
31 | gem 'sqlite3', '~> 1.3.10'
32 | gem 'heroku_san'
33 | gem 'heroku'
34 | end
35 |
36 | group :test do
37 | gem "rspec-rails", "~> 3.2.0"
38 | gem 'capybara'
39 | end
40 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | actionmailer (4.2.0)
5 | actionpack (= 4.2.0)
6 | actionview (= 4.2.0)
7 | activejob (= 4.2.0)
8 | mail (~> 2.5, >= 2.5.4)
9 | rails-dom-testing (~> 1.0, >= 1.0.5)
10 | actionpack (4.2.0)
11 | actionview (= 4.2.0)
12 | activesupport (= 4.2.0)
13 | rack (~> 1.6.0)
14 | rack-test (~> 0.6.2)
15 | rails-dom-testing (~> 1.0, >= 1.0.5)
16 | rails-html-sanitizer (~> 1.0, >= 1.0.1)
17 | actionview (4.2.0)
18 | activesupport (= 4.2.0)
19 | builder (~> 3.1)
20 | erubis (~> 2.7.0)
21 | rails-dom-testing (~> 1.0, >= 1.0.5)
22 | rails-html-sanitizer (~> 1.0, >= 1.0.1)
23 | activejob (4.2.0)
24 | activesupport (= 4.2.0)
25 | globalid (>= 0.3.0)
26 | activemodel (4.2.0)
27 | activesupport (= 4.2.0)
28 | builder (~> 3.1)
29 | activerecord (4.2.0)
30 | activemodel (= 4.2.0)
31 | activesupport (= 4.2.0)
32 | arel (~> 6.0)
33 | activesupport (4.2.0)
34 | i18n (~> 0.7)
35 | json (~> 1.7, >= 1.7.7)
36 | minitest (~> 5.1)
37 | thread_safe (~> 0.3, >= 0.3.4)
38 | tzinfo (~> 1.1)
39 | addressable (2.3.2)
40 | arel (6.0.0)
41 | buftok (0.2.0)
42 | builder (3.2.2)
43 | capybara (2.3.0)
44 | mime-types (>= 1.16)
45 | nokogiri (>= 1.3.3)
46 | rack (>= 1.0.0)
47 | rack-test (>= 0.5.4)
48 | xpath (~> 2.0)
49 | coffee-rails (4.0.1)
50 | coffee-script (>= 2.2.0)
51 | railties (>= 4.0.0, < 5.0)
52 | coffee-script (2.2.0)
53 | coffee-script-source
54 | execjs
55 | coffee-script-source (1.7.0)
56 | commonjs (0.2.7)
57 | diff-lcs (1.2.5)
58 | equalizer (0.0.9)
59 | erubis (2.7.0)
60 | excon (0.16.10)
61 | execjs (2.0.2)
62 | faraday (0.9.0)
63 | multipart-post (>= 1.2, < 3)
64 | globalid (0.3.3)
65 | activesupport (>= 4.1.0)
66 | haml (4.0.6)
67 | tilt
68 | haml-rails (0.8.2)
69 | actionpack (>= 4.0.1)
70 | activesupport (>= 4.0.1)
71 | haml (>= 3.1, < 5.0)
72 | html2haml (>= 1.0.1)
73 | railties (>= 4.0.1)
74 | heroku (2.35.0)
75 | heroku-api (~> 0.3.7)
76 | launchy (>= 0.3.2)
77 | netrc (~> 0.7.7)
78 | rest-client (~> 1.6.1)
79 | rubyzip
80 | heroku-api (0.3.7)
81 | excon (~> 0.16.10)
82 | heroku_san (4.2.1)
83 | heroku-api (>= 0.1.2)
84 | rake
85 | hike (1.2.3)
86 | html2haml (2.0.0)
87 | erubis (~> 2.7.0)
88 | haml (~> 4.0.0)
89 | nokogiri (~> 1.6.0)
90 | ruby_parser (~> 3.5)
91 | http (0.5.0)
92 | http_parser.rb
93 | http_parser.rb (0.6.0)
94 | i18n (0.7.0)
95 | jquery-rails (2.2.1)
96 | railties (>= 3.0, < 5.0)
97 | thor (>= 0.14, < 2.0)
98 | json (1.8.2)
99 | kgio (2.9.3)
100 | launchy (2.2.0)
101 | addressable (~> 2.3)
102 | less (2.5.0)
103 | commonjs (~> 0.2.7)
104 | less-rails (2.5.0)
105 | actionpack (>= 3.1)
106 | less (~> 2.5.0)
107 | libv8 (3.16.14.3)
108 | loofah (2.0.1)
109 | nokogiri (>= 1.5.9)
110 | mail (2.6.3)
111 | mime-types (>= 1.16, < 3)
112 | memoizable (0.4.2)
113 | thread_safe (~> 0.3, >= 0.3.1)
114 | mime-types (2.4.3)
115 | mini_portile (0.6.2)
116 | minitest (5.5.1)
117 | multi_json (1.10.1)
118 | multipart-post (2.0.0)
119 | naught (1.0.0)
120 | netrc (0.7.7)
121 | nokogiri (1.6.6.2)
122 | mini_portile (~> 0.6.0)
123 | pg (0.18.1)
124 | rack (1.6.0)
125 | rack-test (0.6.3)
126 | rack (>= 1.0)
127 | rails (4.2.0)
128 | actionmailer (= 4.2.0)
129 | actionpack (= 4.2.0)
130 | actionview (= 4.2.0)
131 | activejob (= 4.2.0)
132 | activemodel (= 4.2.0)
133 | activerecord (= 4.2.0)
134 | activesupport (= 4.2.0)
135 | bundler (>= 1.3.0, < 2.0)
136 | railties (= 4.2.0)
137 | sprockets-rails
138 | rails-deprecated_sanitizer (1.0.3)
139 | activesupport (>= 4.2.0.alpha)
140 | rails-dom-testing (1.0.5)
141 | activesupport (>= 4.2.0.beta, < 5.0)
142 | nokogiri (~> 1.6.0)
143 | rails-deprecated_sanitizer (>= 1.0.1)
144 | rails-html-sanitizer (1.0.1)
145 | loofah (~> 2.0)
146 | rails_12factor (0.0.3)
147 | rails_serve_static_assets
148 | rails_stdout_logging
149 | rails_serve_static_assets (0.0.4)
150 | rails_stdout_logging (0.0.3)
151 | railties (4.2.0)
152 | actionpack (= 4.2.0)
153 | activesupport (= 4.2.0)
154 | rake (>= 0.8.7)
155 | thor (>= 0.18.1, < 2.0)
156 | raindrops (0.13.0)
157 | rake (10.4.2)
158 | ref (1.0.5)
159 | rest-client (1.6.7)
160 | mime-types (>= 1.16)
161 | rspec-core (3.2.0)
162 | rspec-support (~> 3.2.0)
163 | rspec-expectations (3.2.0)
164 | diff-lcs (>= 1.2.0, < 2.0)
165 | rspec-support (~> 3.2.0)
166 | rspec-mocks (3.2.0)
167 | diff-lcs (>= 1.2.0, < 2.0)
168 | rspec-support (~> 3.2.0)
169 | rspec-rails (3.2.0)
170 | actionpack (>= 3.0, <= 4.2)
171 | activesupport (>= 3.0, <= 4.2)
172 | railties (>= 3.0, <= 4.2)
173 | rspec-core (~> 3.2.0)
174 | rspec-expectations (~> 3.2.0)
175 | rspec-mocks (~> 3.2.0)
176 | rspec-support (~> 3.2.0)
177 | rspec-support (3.2.0)
178 | ruby_parser (3.6.4)
179 | sexp_processor (~> 4.1)
180 | rubyzip (0.9.9)
181 | sass (3.2.19)
182 | sass-rails (4.0.3)
183 | railties (>= 4.0.0, < 5.0)
184 | sass (~> 3.2.0)
185 | sprockets (~> 2.8, <= 2.11.0)
186 | sprockets-rails (~> 2.0)
187 | sexp_processor (4.4.5)
188 | simple_oauth (0.2.0)
189 | spring (1.3.1)
190 | spring-commands-rspec (1.0.4)
191 | spring (>= 0.9.1)
192 | sprockets (2.11.0)
193 | hike (~> 1.2)
194 | multi_json (~> 1.0)
195 | rack (~> 1.0)
196 | tilt (~> 1.1, != 1.3.0)
197 | sprockets-rails (2.2.4)
198 | actionpack (>= 3.0)
199 | activesupport (>= 3.0)
200 | sprockets (>= 2.8, < 4.0)
201 | sqlite3 (1.3.10)
202 | therubyracer (0.12.1)
203 | libv8 (~> 3.16.14.0)
204 | ref
205 | thor (0.19.1)
206 | thread_safe (0.3.4)
207 | tilt (1.4.1)
208 | twitter (5.8.0)
209 | addressable (~> 2.3)
210 | buftok (~> 0.2.0)
211 | equalizer (~> 0.0.9)
212 | faraday (~> 0.9.0)
213 | http (~> 0.5.0)
214 | http_parser.rb (~> 0.6.0)
215 | json (~> 1.8)
216 | memoizable (~> 0.4.0)
217 | naught (~> 1.0)
218 | simple_oauth (~> 0.2.0)
219 | twitter-bootstrap-rails (2.2.8)
220 | actionpack (>= 3.1)
221 | execjs
222 | rails (>= 3.1)
223 | railties (>= 3.1)
224 | tzinfo (1.2.2)
225 | thread_safe (~> 0.1)
226 | uglifier (1.3.0)
227 | execjs (>= 0.3.0)
228 | multi_json (~> 1.0, >= 1.0.2)
229 | unicorn (4.8.3)
230 | kgio (~> 2.6)
231 | rack
232 | raindrops (~> 0.7)
233 | xpath (2.0.0)
234 | nokogiri (~> 1.3)
235 |
236 | PLATFORMS
237 | ruby
238 |
239 | DEPENDENCIES
240 | capybara
241 | coffee-rails (~> 4.0.1)
242 | haml (>= 3.0.0)
243 | haml-rails
244 | heroku
245 | heroku_san
246 | jquery-rails
247 | less-rails
248 | pg
249 | rails (= 4.2.0)
250 | rails_12factor
251 | rspec-rails (~> 3.2.0)
252 | sass-rails (~> 4.0.3)
253 | spring
254 | spring-commands-rspec
255 | sqlite3 (~> 1.3.10)
256 | therubyracer
257 | twitter (~> 5.8.0)
258 | twitter-bootstrap-rails
259 | uglifier (>= 1.3.0)
260 | unicorn
261 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
--------------------------------------------------------------------------------
/README.rdoc:
--------------------------------------------------------------------------------
1 | == About Be Vimmer
2 |
3 | Be Vimmer is an application that tweets Vim commands and their description periodically in Japanese, English and Chinese(cn & tw). This application was created in order to help Vim learners.
4 |
5 |
6 | Vim documentation has to be stored in database in advance. (See +db/seeds.rb+ or +lib/tasks+ )
7 |
8 |
9 | Tweets are pushed via cron task on server.(See +lib/tasks/cron.rb+ ) You need to register Twitter credentials in environment variables before execution.
10 |
11 |
12 | The Web UI just display the Vim command list and the basic information about this application.
13 |
14 |
15 | ===Cron task and arguments
16 |
17 | The following command means "Post 3 tweets every 2 hours in Japanese. EX commands appear every 6 hours."
18 |
19 |
20 | rake cron["jp","2","3","6"]
21 |
22 |
23 | "en" is English, "cn" is Chinese(cn) and "tw" is Chinese(tw).
24 |
25 |
26 | ===How to get OAuth token
27 |
28 | Use this => https://github.com/jugyo/get-twitter-oauth-token
29 |
--------------------------------------------------------------------------------
/README.zh-TW.rdoc:
--------------------------------------------------------------------------------
1 | == 關於 Be Vimmer
2 |
3 | {
}[https://gitter.im/vim-tw/be_vimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge]
4 |
5 | Be Vimmer 是一個可定期在 Twitter 上發佈 Vim 指令及相關敘述 (日文、英文、簡體中文及繁體中文) 的應用程式,以於幫助 Vim 初學者。
6 |
7 |
8 | Vim 文件必須先儲存在資料庫中。(詳見 +db/seeds.rb+ 或 +lib/tasks+)
9 |
10 |
11 | 推文將會在 server 上以 cron 任務的方式進行發佈。 (詳見 +lib/tasks/cron.rb+) 在執行此應用程式前,使用者需先將註冊的推特 (Twitter) 資訊設定在環境變數中。
12 |
13 |
14 | 網路介面將會顯示 Vim 指令清單及此應用程式相關訊息。
15 |
16 |
17 | === Cron 任務與參數設定
18 |
19 | 下列指令說明:每隔兩小時以日文發佈三則推文。EX 指令每六小時出現一次。
20 |
21 |
22 | rake cron["jp","2","3","6"]
23 |
24 |
25 | 「en」即英文,「cn」表示簡體中文,而「tw」表示繁體中文。
26 |
27 |
28 | === 如何取得 OAuth token
29 |
30 | 請參考 => https://github.com/jugyo/get-twitter-oauth-token
31 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env rake
2 | # Add your own tasks in files placed in lib/tasks ending in .rake,
3 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4 |
5 | require File.expand_path('../config/application', __FILE__)
6 |
7 | BeVimmer::Application.load_tasks
8 |
--------------------------------------------------------------------------------
/app/assets/images/rails.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/app/assets/images/rails.png
--------------------------------------------------------------------------------
/app/assets/javascripts/application.js:
--------------------------------------------------------------------------------
1 | // This is a manifest file that'll be compiled into application.js, which will include all the files
2 | // listed below.
3 | //
4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5 | // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6 | //
7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8 | // the compiled file.
9 | //
10 | // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11 | // GO AFTER THE REQUIRES BELOW.
12 | //
13 | //= require_tree .
14 |
--------------------------------------------------------------------------------
/app/assets/javascripts/bootstrap.js.coffee:
--------------------------------------------------------------------------------
1 | jQuery ->
2 | $("a[rel=popover]").popover()
3 | $(".tooltip").tooltip()
4 | $("a[rel=tooltip]").tooltip()
--------------------------------------------------------------------------------
/app/assets/javascripts/vim_command.js.coffee:
--------------------------------------------------------------------------------
1 | # Place all the behaviors and hooks related to the matching controller here.
2 | # All this logic will automatically be available in application.js.
3 | # You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
4 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/application.css:
--------------------------------------------------------------------------------
1 | /*
2 | * This is a manifest file that'll be compiled into application.css, which will include all the files
3 | * listed below.
4 | *
5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7 | *
8 | * You're free to add application-wide styles to this file and they'll appear at the top of the
9 | * compiled file, but it's generally better to create a new file per style scope.
10 | *
11 | *= require_self
12 | *= require_tree .
13 | */
14 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/bootstrap_and_overrides.css.less:
--------------------------------------------------------------------------------
1 | @import "twitter/bootstrap/bootstrap";
2 | @import "twitter/bootstrap/responsive";
3 |
4 | // Set the correct sprite paths
5 | @iconSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings.png");
6 | @iconWhiteSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings-white.png");
7 |
8 | // Font Awesome
9 | @fontAwesomeEotPath: asset-url("fontawesome-webfont.eot");
10 | @fontAwesomeEotPath_iefix: asset-url("fontawesome-webfont.eot?#iefix");
11 | @fontAwesomeWoffPath: asset-url("fontawesome-webfont.woff");
12 | @fontAwesomeTtfPath: asset-url("fontawesome-webfont.ttf");
13 | @fontAwesomeSvgPath: asset-url("fontawesome-webfont.svg#fontawesomeregular");
14 | @import "fontawesome/font-awesome";
15 |
16 | body {
17 | padding-top: 60px;
18 | }
19 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/vim_command.css.scss:
--------------------------------------------------------------------------------
1 | // Place all the styles related to the vim_command controller here.
2 | // They will automatically be included in application.css.
3 | // You can use Sass (SCSS) here: http://sass-lang.com/
4 |
--------------------------------------------------------------------------------
/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | class ApplicationController < ActionController::Base
2 | protect_from_forgery
3 | end
4 |
--------------------------------------------------------------------------------
/app/controllers/vim_command_controller.rb:
--------------------------------------------------------------------------------
1 | class VimCommandController < ApplicationController
2 | def index
3 | lang = params[:lang].presence || 'jp'
4 | @vim_commands = VimCommand.where(language: lang)
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/app/helpers/application_helper.rb:
--------------------------------------------------------------------------------
1 | module ApplicationHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/vim_command_helper.rb:
--------------------------------------------------------------------------------
1 | module VimCommandHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/mailers/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/app/mailers/.gitkeep
--------------------------------------------------------------------------------
/app/models/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/app/models/.gitkeep
--------------------------------------------------------------------------------
/app/models/mode.rb:
--------------------------------------------------------------------------------
1 | class Mode < ActiveRecord::Base
2 | has_many :vim_commands
3 | end
4 |
--------------------------------------------------------------------------------
/app/models/vim_command.rb:
--------------------------------------------------------------------------------
1 | # coding: utf-8
2 | require 'twitter'
3 |
4 | class VimCommand < ActiveRecord::Base
5 | belongs_to :mode
6 | default_scope -> { order(:id) }
7 |
8 | def self.update_tweets(lang, skip_interval, tweets_per_exec, ex_show_interval)
9 | if execute_this_time? skip_interval.to_i
10 | execute lang, tweets_per_exec.to_i, ex_show_interval.to_i
11 | else
12 | puts "Skip this time"
13 | end
14 | end
15 |
16 | def self.execute_this_time?(skip_interval)
17 | Time.now.hour % skip_interval == 0
18 | end
19 |
20 | def self.show_ex_command?(ex_show_interval)
21 | Time.now.hour % ex_show_interval == 0
22 | end
23 |
24 | def self.execute(lang, tweets_per_exec, ex_show_interval)
25 | commands = show_ex_command?(ex_show_interval) ? all_commands(lang) : non_ex_commands(lang)
26 | count = commands.count
27 | tweets_per_exec.times do
28 | idx = rand(count)
29 | command = VimCommand.find commands[idx].id
30 | tweet = build_tweet command
31 | post tweet, lang
32 | end
33 | end
34 |
35 | def self.all_commands(lang)
36 | VimCommand.where(language: lang).select('id')
37 | end
38 |
39 | def self.non_ex_commands(lang)
40 | VimCommand.where(language: lang).joins(:mode).where("modes.label NOT LIKE 'EX%'").select('vim_commands.id')
41 | end
42 |
43 | def self.build_tweet(command)
44 | tweet = "#{command.command} → #{command.description} [#{command.mode.label}]"
45 | length = 140 - " #Vim".size - 1
46 | tweet.truncate(length) + " #Vim"
47 | end
48 |
49 | def self.post(tweet, lang)
50 | puts tweet
51 | begin
52 | twitter_client(lang).update tweet.chomp
53 | rescue => ex
54 | p ex
55 | end
56 | end
57 |
58 | def self.twitter_client(lang)
59 | params = {
60 | consumer_key: ENV["twitter_consumer_key_#{lang}"],
61 | consumer_secret: ENV["twitter_consumer_secret_#{lang}"],
62 | access_token: ENV["twitter_oauth_token_#{lang}"],
63 | access_token_secret: ENV["twitter_oauth_token_secret_#{lang}"]
64 | }
65 |
66 | raise "Please check env values!" if params.values.any?(&:nil?)
67 |
68 | Twitter::REST::Client.new(params)
69 | end
70 | end
71 |
--------------------------------------------------------------------------------
/app/views/layouts/application.html.haml:
--------------------------------------------------------------------------------
1 | !!! 5
2 | %html(lang="en")
3 | %head
4 | %meta(charset="utf-8")
5 | %meta(name="viewport" content="width=device-width, initial-scale=1.0")
6 | %title= content_for?(:title) ? yield(:title) : "Be Vimmer"
7 | = csrf_meta_tags
8 | / Le HTML5 shim, for IE6-8 support of HTML elements
9 | /[if lt IE 9]
10 | = javascript_include_tag "http://html5shim.googlecode.com/svn/trunk/html5.js"
11 | = stylesheet_link_tag "application", :media => "all"
12 | %link(href="favicon.ico" rel="shortcut icon")
13 | %link(href="images/apple-touch-icon.png" rel="apple-touch-icon")
14 | %link(href="images/apple-touch-icon-72x72.png" rel="apple-touch-icon" sizes="72x72")
15 | %link(href="images/apple-touch-icon-114x114.png" rel="apple-touch-icon" sizes="114x114")
16 |
17 | %body
18 | .navbar.navbar-fixed-top
19 | .navbar-inner
20 | .container
21 | %a.btn.btn-navbar(data-target=".nav-collapse" data-toggle="collapse")
22 | %span.icon-bar
23 | %span.icon-bar
24 | %span.icon-bar
25 | %a.brand(href="#") Be Vimmer
26 | .container.nav-collapse
27 | %ul.nav
28 | %li= link_to "Japanese", "/"
29 | %li= link_to "English", "/?lang=en"
30 | %li= link_to "Chinese(cn)", "/?lang=cn"
31 | %li= link_to "Chinese(tw)", "/?lang=tw"
32 |
33 | .container
34 |
35 | .content
36 | .row
37 | .span9
38 | = yield
39 | .span3
40 | .well.sidebar-nav
41 | %h3 Links
42 | %ul.nav.nav-list
43 | %li.nav-header About Be Vimmer
44 | %li= link_to "Japanese", "http://blog.jnito.com/entry/20120415/1334452212"
45 | %li= link_to "English", "http://junichiito.blogspot.jp/2012/04/released-be-vimmer-twitter-bot.html"
46 | %li.nav-header Twitter Bots
47 | %li= link_to "Japanese", "https://twitter.com/#!/be_vimmer_jp"
48 | %li= link_to "English", "https://twitter.com/#!/be_vimmer_en"
49 | %li= link_to "Chinese(cn)", "https://twitter.com/#!/be_vimmer_cn"
50 | %li= link_to "Chinese(tw)", "https://twitter.com/#!/be_vimmer_tw"
51 | %li.nav-header Vim Documentation
52 | %li= link_to "Japanese", "http://vim-jp.org/vimdoc-ja/quickref.html"
53 | %li= link_to "English", "http://code.google.com/p/vim/source/browse/runtime/doc/index.txt"
54 | %li= link_to "Chinese(cn)", "http://sourceforge.net/projects/vimcdoc/files/vimcdoc/1.8.0/"
55 | %li= link_to "Chinese(tw)", "https://github.com/chusiang/vimcdoc-tw"
56 | %li.nav-header Source Code
57 | %li= link_to "github", "https://github.com/JunichiIto/be_vimmer"
58 | %li.nav-header Developer
59 | %li= link_to "@jnchito", "https://twitter.com/jnchito"
60 |
61 | %footer
62 | /
63 | Javascripts
64 | \==================================================
65 | / Placed at the end of the document so the pages load faster
66 | = javascript_include_tag "application"
67 |
68 |
--------------------------------------------------------------------------------
/app/views/vim_command/index.html.haml:
--------------------------------------------------------------------------------
1 | %h2
2 | Command List
3 | %table.table.table-bordered.table-condensed
4 | %thead
5 | %tr
6 | %th ID
7 | %th MODE
8 | %th COMMAND
9 | %th DESCRIPTION
10 | %tbody
11 | - @vim_commands.each do |command|
12 | %tr
13 | %td= command.id
14 | %td= command.mode.label
15 | %td= command.command
16 | %td= command.description
17 |
--------------------------------------------------------------------------------
/bin/bundle:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3 | load Gem.bin_path('bundler', 'bundle')
4 |
--------------------------------------------------------------------------------
/bin/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | begin
3 | load File.expand_path("../spring", __FILE__)
4 | rescue LoadError
5 | end
6 | APP_PATH = File.expand_path('../../config/application', __FILE__)
7 | require_relative '../config/boot'
8 | require 'rails/commands'
9 |
--------------------------------------------------------------------------------
/bin/rake:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | begin
3 | load File.expand_path("../spring", __FILE__)
4 | rescue LoadError
5 | end
6 | require_relative '../config/boot'
7 | require 'rake'
8 | Rake.application.run
9 |
--------------------------------------------------------------------------------
/bin/rspec:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | begin
3 | load File.expand_path("../spring", __FILE__)
4 | rescue LoadError
5 | end
6 | require 'bundler/setup'
7 | load Gem.bin_path('rspec-core', 'rspec')
8 |
--------------------------------------------------------------------------------
/bin/setup:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require 'pathname'
3 |
4 | # path to your application root.
5 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
6 |
7 | Dir.chdir APP_ROOT do
8 | # This script is a starting point to setup your application.
9 | # Add necessary setup steps to this file:
10 |
11 | puts "== Installing dependencies =="
12 | system "gem install bundler --conservative"
13 | system "bundle check || bundle install"
14 |
15 | # puts "\n== Copying sample files =="
16 | # unless File.exist?("config/database.yml")
17 | # system "cp config/database.yml.sample config/database.yml"
18 | # end
19 |
20 | puts "\n== Preparing database =="
21 | system "bin/rake db:setup"
22 |
23 | puts "\n== Removing old logs and tempfiles =="
24 | system "rm -f log/*"
25 | system "rm -rf tmp/cache"
26 |
27 | puts "\n== Restarting application server =="
28 | system "touch tmp/restart.txt"
29 | end
30 |
--------------------------------------------------------------------------------
/bin/spring:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | # This file loads spring without using Bundler, in order to be fast
4 | # It gets overwritten when you run the `spring binstub` command
5 |
6 | unless defined?(Spring)
7 | require "rubygems"
8 | require "bundler"
9 |
10 | if match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m)
11 | ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)
12 | ENV["GEM_HOME"] = nil
13 | Gem.paths = ENV
14 |
15 | gem "spring", match[1]
16 | require "spring/binstub"
17 | end
18 | end
19 |
--------------------------------------------------------------------------------
/config.ru:
--------------------------------------------------------------------------------
1 | # This file is used by Rack-based servers to start the application.
2 |
3 | require ::File.expand_path('../config/environment', __FILE__)
4 | run BeVimmer::Application
5 |
--------------------------------------------------------------------------------
/config/application.rb:
--------------------------------------------------------------------------------
1 | require File.expand_path('../boot', __FILE__)
2 |
3 | require 'rails/all'
4 |
5 | # Require the gems listed in Gemfile, including any gems
6 | # you've limited to :test, :development, or :production.
7 | Bundler.require(*Rails.groups)
8 |
9 | module BeVimmer
10 | class Application < Rails::Application
11 | # Settings in config/environments/* take precedence over those specified here.
12 | # Application configuration should go into files in config/initializers
13 | # -- all .rb files in that directory are automatically loaded.
14 |
15 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
16 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
17 | # config.time_zone = 'Central Time (US & Canada)'
18 |
19 | # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
20 | # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
21 | # config.i18n.default_locale = :de
22 |
23 | # Do not swallow errors in after_commit/after_rollback callbacks.
24 | config.active_record.raise_in_transactional_callbacks = true
25 | end
26 | end
27 |
--------------------------------------------------------------------------------
/config/boot.rb:
--------------------------------------------------------------------------------
1 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
2 |
3 | require 'bundler/setup' # Set up gems listed in the Gemfile.
4 |
--------------------------------------------------------------------------------
/config/database.yml:
--------------------------------------------------------------------------------
1 | # SQLite version 3.x
2 | # gem install sqlite3
3 | #
4 | # Ensure the SQLite 3 gem is defined in your Gemfile
5 | # gem 'sqlite3'
6 | development:
7 | adapter: sqlite3
8 | database: db/development.sqlite3
9 | pool: 5
10 | timeout: 5000
11 |
12 | # Warning: The database defined as "test" will be erased and
13 | # re-generated from your development database when you run "rake".
14 | # Do not set this db to the same as development or production.
15 | test:
16 | adapter: sqlite3
17 | database: db/test.sqlite3
18 | pool: 5
19 | timeout: 5000
20 |
21 | production:
22 | adapter: sqlite3
23 | database: db/production.sqlite3
24 | pool: 5
25 | timeout: 5000
26 |
--------------------------------------------------------------------------------
/config/environment.rb:
--------------------------------------------------------------------------------
1 | # Load the Rails application.
2 | require File.expand_path('../application', __FILE__)
3 |
4 | # Initialize the Rails application.
5 | Rails.application.initialize!
6 |
--------------------------------------------------------------------------------
/config/environments/development.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # In the development environment your application's code is reloaded on
5 | # every request. This slows down response time but is perfect for development
6 | # since you don't have to restart the web server when you make code changes.
7 | config.cache_classes = false
8 |
9 | # Do not eager load code on boot.
10 | config.eager_load = false
11 |
12 | # Show full error reports and disable caching.
13 | config.consider_all_requests_local = true
14 | config.action_controller.perform_caching = false
15 |
16 | # Don't care if the mailer can't send.
17 | config.action_mailer.raise_delivery_errors = false
18 |
19 | # Print deprecation notices to the Rails logger.
20 | config.active_support.deprecation = :log
21 |
22 | # Raise an error on page load if there are pending migrations.
23 | config.active_record.migration_error = :page_load
24 |
25 | # Debug mode disables concatenation and preprocessing of assets.
26 | # This option may cause significant delays in view rendering with a large
27 | # number of complex assets.
28 | config.assets.debug = true
29 |
30 | # Asset digests allow you to set far-future HTTP expiration dates on all assets,
31 | # yet still be able to expire them through the digest params.
32 | config.assets.digest = true
33 |
34 | # Adds additional error checking when serving assets at runtime.
35 | # Checks for improperly declared sprockets dependencies.
36 | # Raises helpful error messages.
37 | config.assets.raise_runtime_errors = true
38 |
39 | # Raises error for missing translations
40 | # config.action_view.raise_on_missing_translations = true
41 | end
42 |
--------------------------------------------------------------------------------
/config/environments/production.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # Code is not reloaded between requests.
5 | config.cache_classes = true
6 |
7 | # Eager load code on boot. This eager loads most of Rails and
8 | # your application in memory, allowing both threaded web servers
9 | # and those relying on copy on write to perform better.
10 | # Rake tasks automatically ignore this option for performance.
11 | config.eager_load = true
12 |
13 | # Full error reports are disabled and caching is turned on.
14 | config.consider_all_requests_local = false
15 | config.action_controller.perform_caching = true
16 |
17 | # Enable Rack::Cache to put a simple HTTP cache in front of your application
18 | # Add `rack-cache` to your Gemfile before enabling this.
19 | # For large-scale production use, consider using a caching reverse proxy like
20 | # NGINX, varnish or squid.
21 | # config.action_dispatch.rack_cache = true
22 |
23 | # Disable serving static files from the `/public` folder by default since
24 | # Apache or NGINX already handles this.
25 | config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
26 |
27 | # Compress JavaScripts and CSS.
28 | config.assets.js_compressor = :uglifier
29 | # config.assets.css_compressor = :sass
30 |
31 | # Do not fallback to assets pipeline if a precompiled asset is missed.
32 | config.assets.compile = false
33 |
34 | # Asset digests allow you to set far-future HTTP expiration dates on all assets,
35 | # yet still be able to expire them through the digest params.
36 | config.assets.digest = true
37 |
38 | # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
39 |
40 | # Specifies the header that your server uses for sending files.
41 | # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
42 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
43 |
44 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
45 | # config.force_ssl = true
46 |
47 | # Use the lowest log level to ensure availability of diagnostic information
48 | # when problems arise.
49 | config.log_level = :debug
50 |
51 | # Prepend all log lines with the following tags.
52 | config.log_tags = [ :uuid ]
53 |
54 | # Use a different logger for distributed setups.
55 | # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
56 |
57 | # Use a different cache store in production.
58 | # config.cache_store = :mem_cache_store
59 |
60 | # Enable serving of images, stylesheets, and JavaScripts from an asset server.
61 | # config.action_controller.asset_host = 'http://assets.example.com'
62 |
63 | # Ignore bad email addresses and do not raise email delivery errors.
64 | # Set this to true and configure the email server for immediate delivery to raise delivery errors.
65 | # config.action_mailer.raise_delivery_errors = false
66 |
67 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
68 | # the I18n.default_locale when a translation cannot be found).
69 | config.i18n.fallbacks = true
70 |
71 | # Send deprecation notices to registered listeners.
72 | config.active_support.deprecation = :notify
73 |
74 | # Use default logging formatter so that PID and timestamp are not suppressed.
75 | config.log_formatter = ::Logger::Formatter.new
76 |
77 | # Do not dump schema after migrations.
78 | config.active_record.dump_schema_after_migration = false
79 | end
80 |
--------------------------------------------------------------------------------
/config/environments/test.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # The test environment is used exclusively to run your application's
5 | # test suite. You never need to work with it otherwise. Remember that
6 | # your test database is "scratch space" for the test suite and is wiped
7 | # and recreated between test runs. Don't rely on the data there!
8 | config.cache_classes = true
9 |
10 | # Do not eager load code on boot. This avoids loading your whole application
11 | # just for the purpose of running a single test. If you are using a tool that
12 | # preloads Rails for running tests, you may have to set it to true.
13 | config.eager_load = false
14 |
15 | # Configure static file server for tests with Cache-Control for performance.
16 | config.serve_static_files = true
17 | config.static_cache_control = 'public, max-age=3600'
18 |
19 | # Show full error reports and disable caching.
20 | config.consider_all_requests_local = true
21 | config.action_controller.perform_caching = false
22 |
23 | # Raise exceptions instead of rendering exception templates.
24 | config.action_dispatch.show_exceptions = false
25 |
26 | # Disable request forgery protection in test environment.
27 | config.action_controller.allow_forgery_protection = false
28 |
29 | # Tell Action Mailer not to deliver emails to the real world.
30 | # The :test delivery method accumulates sent emails in the
31 | # ActionMailer::Base.deliveries array.
32 | config.action_mailer.delivery_method = :test
33 |
34 | # Randomize the order test cases are executed.
35 | config.active_support.test_order = :random
36 |
37 | # Print deprecation notices to the stderr.
38 | config.active_support.deprecation = :stderr
39 |
40 | # Raises error for missing translations
41 | # config.action_view.raise_on_missing_translations = true
42 | end
43 |
--------------------------------------------------------------------------------
/config/initializers/assets.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Version of your assets, change this if you want to expire all your assets.
4 | Rails.application.config.assets.version = '1.0'
5 |
6 | # Add additional assets to the asset load path
7 | # Rails.application.config.assets.paths << Emoji.images_path
8 |
9 | # Precompile additional assets.
10 | # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
11 | # Rails.application.config.assets.precompile += %w( search.js )
12 |
--------------------------------------------------------------------------------
/config/initializers/backtrace_silencers.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5 |
6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7 | # Rails.backtrace_cleaner.remove_silencers!
8 |
--------------------------------------------------------------------------------
/config/initializers/cookies_serializer.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | Rails.application.config.action_dispatch.cookies_serializer = :json
4 |
--------------------------------------------------------------------------------
/config/initializers/filter_parameter_logging.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Configure sensitive parameters which will be filtered from the log file.
4 | Rails.application.config.filter_parameters += [:password]
5 |
--------------------------------------------------------------------------------
/config/initializers/generators.rb:
--------------------------------------------------------------------------------
1 | Rails.application.config.generators do |g|
2 | g.test_framework = :rspec
3 | end
4 |
--------------------------------------------------------------------------------
/config/initializers/inflections.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new inflection rules using the following format. Inflections
4 | # are locale specific, and you may define rules for as many different
5 | # locales as you wish. All of these examples are active by default:
6 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
7 | # inflect.plural /^(ox)$/i, '\1en'
8 | # inflect.singular /^(ox)en/i, '\1'
9 | # inflect.irregular 'person', 'people'
10 | # inflect.uncountable %w( fish sheep )
11 | # end
12 |
13 | # These inflection rules are supported but not enabled by default:
14 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
15 | # inflect.acronym 'RESTful'
16 | # end
17 |
--------------------------------------------------------------------------------
/config/initializers/mime_types.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new mime types for use in respond_to blocks:
4 | # Mime::Type.register "text/richtext", :rtf
5 |
--------------------------------------------------------------------------------
/config/initializers/secret_token.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Your secret key is used for verifying the integrity of signed cookies.
4 | # If you change this key, all old signed cookies will become invalid!
5 |
6 | # Make sure the secret is at least 30 characters and all random,
7 | # no regular words or you'll be exposed to dictionary attacks.
8 | # You can use `rake secret` to generate a secure secret key.
9 |
10 | # Make sure your secret_key_base is kept private
11 | # if you're sharing your code publicly.
12 | BeVimmer::Application.config.secret_key_base = 'e95bc8e9a8f3efc3f6bf39b3abe4e6d84073973d0c017d376faf8a36a2f087871205cbddbe4f67eac405d5560b1b9e1d1e0e430b4e131ae07537a7e46d63879c'
13 |
--------------------------------------------------------------------------------
/config/initializers/session_store.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | Rails.application.config.session_store :cookie_store, key: '_be_vimmer_session'
4 |
--------------------------------------------------------------------------------
/config/initializers/wrap_parameters.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # This file contains settings for ActionController::ParamsWrapper which
4 | # is enabled by default.
5 |
6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7 | ActiveSupport.on_load(:action_controller) do
8 | wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
9 | end
10 |
11 | # To enable root element in JSON for ActiveRecord objects.
12 | # ActiveSupport.on_load(:active_record) do
13 | # self.include_root_in_json = true
14 | # end
15 |
--------------------------------------------------------------------------------
/config/locales/en.bootstrap.yml:
--------------------------------------------------------------------------------
1 | # Sample localization file for English. Add more files in this directory for other locales.
2 | # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3 |
4 | en:
5 | helpers:
6 | actions: "Actions"
7 | links:
8 | back: "Back"
9 | cancel: "Cancel"
10 | confirm: "Confirm"
11 | destroy: "Delete"
12 | new: "New"
13 | titles:
14 | edit: "Edit"
15 | save: "Save"
16 | new: "New"
17 | delete: "Delete"
18 |
--------------------------------------------------------------------------------
/config/locales/en.yml:
--------------------------------------------------------------------------------
1 | # Files in the config/locales directory are used for internationalization
2 | # and are automatically loaded by Rails. If you want to use locales other
3 | # than English, add the necessary files in this directory.
4 | #
5 | # To use the locales, use `I18n.t`:
6 | #
7 | # I18n.t 'hello'
8 | #
9 | # In views, this is aliased to just `t`:
10 | #
11 | # <%= t('hello') %>
12 | #
13 | # To use a different locale, set it with `I18n.locale`:
14 | #
15 | # I18n.locale = :es
16 | #
17 | # This would use the information in config/locales/es.yml.
18 | #
19 | # To learn more, please read the Rails Internationalization guide
20 | # available at http://guides.rubyonrails.org/i18n.html.
21 |
22 | en:
23 | hello: "Hello world"
24 |
--------------------------------------------------------------------------------
/config/routes.rb:
--------------------------------------------------------------------------------
1 | BeVimmer::Application.routes.draw do
2 | get "vim_command/index"
3 |
4 | # The priority is based upon order of creation:
5 | # first created -> highest priority.
6 |
7 | # Sample of regular route:
8 | # match 'products/:id' => 'catalog#view'
9 | # Keep in mind you can assign values other than :controller and :action
10 |
11 | # Sample of named route:
12 | # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
13 | # This route can be invoked with purchase_url(:id => product.id)
14 |
15 | # Sample resource route (maps HTTP verbs to controller actions automatically):
16 | # resources :products
17 |
18 | # Sample resource route with options:
19 | # resources :products do
20 | # member do
21 | # get 'short'
22 | # post 'toggle'
23 | # end
24 | #
25 | # collection do
26 | # get 'sold'
27 | # end
28 | # end
29 |
30 | # Sample resource route with sub-resources:
31 | # resources :products do
32 | # resources :comments, :sales
33 | # resource :seller
34 | # end
35 |
36 | # Sample resource route with more complex sub-resources
37 | # resources :products do
38 | # resources :comments
39 | # resources :sales do
40 | # get 'recent', :on => :collection
41 | # end
42 | # end
43 |
44 | # Sample resource route within a namespace:
45 | # namespace :admin do
46 | # # Directs /admin/products/* to Admin::ProductsController
47 | # # (app/controllers/admin/products_controller.rb)
48 | # resources :products
49 | # end
50 |
51 | # You can have the root of your site routed with "root"
52 | # just remember to delete public/index.html.
53 | root :to => 'vim_command#index'
54 |
55 | # See how all your routes lay out with "rake routes"
56 |
57 | # This is a legacy wild controller route that's not recommended for RESTful applications.
58 | # Note: This route will make all actions in every controller accessible via GET requests.
59 | # match ':controller(/:action(/:id))(.:format)'
60 | end
61 |
--------------------------------------------------------------------------------
/config/secrets.yml:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Your secret key is used for verifying the integrity of signed cookies.
4 | # If you change this key, all old signed cookies will become invalid!
5 |
6 | # Make sure the secret is at least 30 characters and all random,
7 | # no regular words or you'll be exposed to dictionary attacks.
8 | # You can use `rake secret` to generate a secure secret key.
9 |
10 | # Make sure the secrets in this file are kept private
11 | # if you're sharing your code publicly.
12 |
13 | development:
14 | secret_key_base: d0c40d10e5c31a496349ec5cb92d1eb6bdadb3d4afe6dbef4c73a2bb7b3486f1db32aced0d55b09bda2fbac3389a34426e0ea12397d9449894d9de9233ec1534
15 |
16 | test:
17 | secret_key_base: d4f38c583c89bdff0f1b297a15ee98829584a122c06646ef88b6da5336ccbac68df285c22a64ac48dd8cd371f1a86173284593286c2243e112dbae00805adc36
18 |
19 | # Do not keep production secrets in the repository,
20 | # instead read values from the environment.
21 | production:
22 | secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
23 |
--------------------------------------------------------------------------------
/config/unicorn.rb:
--------------------------------------------------------------------------------
1 | worker_processes Integer(ENV["WEB_CONCURRENCY"] || 2)
2 | timeout 30
3 | preload_app true
4 |
5 | before_fork do |server, worker|
6 | Signal.trap 'TERM' do
7 | puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
8 | Process.kill 'QUIT', Process.pid
9 | end
10 |
11 | defined?(ActiveRecord::Base) and
12 | ActiveRecord::Base.connection.disconnect!
13 | end
14 |
15 | after_fork do |server, worker|
16 | Signal.trap 'TERM' do
17 | puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
18 | end
19 |
20 | defined?(ActiveRecord::Base) and
21 | ActiveRecord::Base.establish_connection
22 | end
23 |
--------------------------------------------------------------------------------
/db/migrate/20120413194952_create_modes.rb:
--------------------------------------------------------------------------------
1 | class CreateModes < ActiveRecord::Migration
2 | def change
3 | create_table :modes do |t|
4 | t.string :label
5 |
6 | t.timestamps
7 | end
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20120413195006_create_vim_commands.rb:
--------------------------------------------------------------------------------
1 | class CreateVimCommands < ActiveRecord::Migration
2 | def change
3 | create_table :vim_commands do |t|
4 | t.string :mode_id
5 | t.string :command
6 | t.string :description
7 |
8 | t.timestamps
9 | end
10 | add_index :vim_commands, [:mode_id, :command], :unique
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/db/migrate/20120414050328_add_language_to_vim_commands.rb:
--------------------------------------------------------------------------------
1 | class AddLanguageToVimCommands < ActiveRecord::Migration
2 | def change
3 | add_column :vim_commands, :language, :string
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20120414051201_update_index_to_vim_commands.rb:
--------------------------------------------------------------------------------
1 | class UpdateIndexToVimCommands < ActiveRecord::Migration
2 | def change
3 | remove_index :vim_commands, [:mode_id, :command]
4 | add_index :vim_commands, [:language, :mode_id, :command]
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20120416214136_change_mode_id.rb:
--------------------------------------------------------------------------------
1 | class ChangeModeId < ActiveRecord::Migration
2 | def up
3 | #http://stackoverflow.com/questions/8503156/altered-my-database-structure-in-development-so-tried-to-reset-heroku-deployed
4 | remove_index :vim_commands, [:language, :mode_id, :command]
5 | rename_column :vim_commands, :mode_id, :old_mode_id
6 | add_column :vim_commands, :mode_id, :integer
7 | VimCommand.reset_column_information
8 | VimCommand.all.each {|e| e.update_attribute(:mode_id, e.old_mode_id.to_i) }
9 | remove_column :vim_commands, :old_mode_id
10 | add_index :vim_commands, [:language, :mode_id, :command], unique: true, name: "idx_l_m_c"
11 | end
12 |
13 | def down
14 | raise IrreversibleMigration
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/db/schema.rb:
--------------------------------------------------------------------------------
1 | # encoding: UTF-8
2 | # This file is auto-generated from the current state of the database. Instead
3 | # of editing this file, please use the migrations feature of Active Record to
4 | # incrementally modify your database, and then regenerate this schema definition.
5 | #
6 | # Note that this schema.rb definition is the authoritative source for your
7 | # database schema. If you need to create the application database on another
8 | # system, you should be using db:schema:load, not running all the migrations
9 | # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10 | # you'll amass, the slower it'll run and the greater likelihood for issues).
11 | #
12 | # It's strongly recommended to check this file into your version control system.
13 |
14 | ActiveRecord::Schema.define(:version => 20120416214136) do
15 |
16 | create_table "modes", :force => true do |t|
17 | t.string "label"
18 | t.datetime "created_at", :null => false
19 | t.datetime "updated_at", :null => false
20 | end
21 |
22 | create_table "vim_commands", :force => true do |t|
23 | t.string "command"
24 | t.string "description"
25 | t.datetime "created_at", :null => false
26 | t.datetime "updated_at", :null => false
27 | t.string "language"
28 | t.integer "mode_id"
29 | end
30 |
31 | add_index "vim_commands", ["language", "mode_id", "command"], :name => "idx_l_m_c", :unique => true
32 |
33 | end
34 |
--------------------------------------------------------------------------------
/doc/README_FOR_APP:
--------------------------------------------------------------------------------
1 | Use this README file to introduce your application and point to useful places in the API for learning more.
2 | Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
3 |
--------------------------------------------------------------------------------
/lib/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/lib/assets/.gitkeep
--------------------------------------------------------------------------------
/lib/tasks/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/lib/tasks/.gitkeep
--------------------------------------------------------------------------------
/lib/tasks/cron.rake:
--------------------------------------------------------------------------------
1 | desc "Random tweets"
2 | task :cron, "lang", "skip_interval", "tweets_per_exec", "ex_show_interval"
3 | task :cron => :environment do |x, args|
4 | VimCommand.update_tweets(args.lang, args.skip_interval, args.tweets_per_exec, args.ex_show_interval)
5 | end
6 |
--------------------------------------------------------------------------------
/lib/tasks/fix_mode_of_new_jp.rake:
--------------------------------------------------------------------------------
1 | # encoding: UTF-8
2 | namespace :seed do
3 | desc "Fix mode of new Japanese"
4 | task :fix_mode_of_new_jp => :environment do
5 | mode = Mode.where(label: "ファイル編集").first_or_create!
6 | VimCommand.update_all("mode_id = #{mode.id}", "id between 3937 and 3944")
7 | end
8 | end
9 |
10 |
--------------------------------------------------------------------------------
/lib/tasks/insert_cn.rake:
--------------------------------------------------------------------------------
1 | # encoding: UTF-8
2 | namespace :seed do
3 | desc "Insert Chinese Descriptions"
4 | task :insert_cn => :environment do
5 | @lines = <<-EOF.split "\n"
6 | ###插入模式
7 | CTRL-@ 插入最近插入的文本并停止插入
8 | CTRL-A 插入最近插入的文本
9 | CTRL-B 不用 |i_CTRL-B-gone|
10 | CTRL-C 退出插入模式,不检查缩写,除非置位了'insertmode'。
11 | CTRL-D 在当前行删除一个 shiftwidth 的缩进
12 | CTRL-E 插入光标下方的字符
13 | CTRL-F 不用 (但缺省是 'cinkeys' 中的一项,用以重新缩进本行)
14 | CTRL-G CTRL-J 往下一行,到插入开始的列
15 | CTRL-G j 往下一行,到插入开始的列
16 | CTRL-G 往下一行,到插入开始的列
17 | CTRL-G CTRL-K 往上一行,到插入开始的列
18 | CTRL-G k 往上一行,到插入开始的列
19 | CTRL-G 往上一行,到插入开始的列
20 | CTRL-G u 开始新的不可撤消的编辑
21 | 删除光标前的字符
22 | {char1}{char2}输入二合字母 (只有打开了 'digraph' 选项才有效)
23 | CTRL-H 等同于
24 | 插入 字符
25 | CTRL-I 等同于
26 | 等同于
27 | CTRL-J 等同于
28 | CTRL-K {char1} {char2}输入二合字母
29 | CTRL-L 'insertmode' 打开时: 离开插入模式
30 | 开始新行
31 | CTRL-M 等同于
32 | CTRL-N 查找光标前面的关键字的下一个匹配
33 | CTRL-O 执行单个命令然后回到插入模式
34 | CTRL-P 查找光标前面的关键字的前一个匹配
35 | CTRL-Q 等同于 CTRL-V,除非它用于终端控制流
36 | CTRL-R {0-9a-z"%#*:=}插入寄存器内容
37 | CTRL-R CTRL-R {0-9a-z"%#*:=}按本义插入寄存器内容
38 | CTRL-R CTRL-O {0-9a-z"%#*:=}按本义插入寄存器内容,而且不自动缩进
39 | CTRL-R CTRL-P {0-9a-z"%#*:=}按本义插入寄存器内容,而且修正缩进
40 | CTRL-S (用于终端控制流)
41 | CTRL-T 在当前行插入一个 shiftwidth 的缩进
42 | CTRL-U 删除当前行的所有输入字符
43 | CTRL-V {char} 按本义插入下一个非数字字符
44 | CTRL-V {number} 插入三位十进制数字代表的单个字节。
45 | CTRL-W 删除光标前的单词
46 | CTRL-X {mode} 进入 CTRL-X 子模式,见 |i_CTRL-X_index|
47 | CTRL-Y 插入光标上方的字符
48 | CTRL-Z 'insertmode' 打开时: 暂停 Vim
49 | 结束插入模式 (除非打开了 'insertmode')
50 | CTRL-[ 等同于
51 | CTRL-\ CTRL-N 进入普通模式
52 | CTRL-\ CTRL-G 进入 'insertmode' 指定的模式
53 | CTRL-\ a - z 保留给扩展用
54 | CTRL-\ others 不用
55 | CTRL-] 切换缩写
56 | CTRL-^ 切换 |:lmap| 映射的使用
57 | CTRL-_ 'allowrevins' 打开时: 改变语言(希伯来语,波斯语等) {仅当编译时加入|+rightleft| 特性才有效}
58 | 0 CTRL-D 删除当前行的所有缩进
59 | ^ CTRL-D 删除当前行的所有缩进,在下一行恢复删除的缩进
60 | 删除光标所在的字符
61 | 光标左移一个字符
62 | 光标左移一个单词
63 | 光标左移一个单词
64 | 光标右移一个字符
65 | 光标右移一个单词
66 | 光标右移一个单词
67 | 光标上移一行
68 | 等同于
69 | 光标下移一行
70 | 等同于
71 | 光标移到行首
72 | 光标移到文件首
73 | 光标移到行尾后面
74 | 光标移到文件尾后面
75 | 满屏上滚
76 | 满屏下滚
77 | 等同于
78 | 停止插入模式显示帮助窗口
79 | 切换插入/替换模式
80 | 光标移到鼠标点击处
81 | 窗口向下滚动三行
82 | 窗口向下滚动完整一页
83 | 窗口向上滚动三行
84 | 窗口向上滚动完整一页
85 | 窗口向左滚动六列
86 | 窗口向左滚动完整一页
87 | 窗口向右滚动六列
88 | 窗口向右滚动完整一页
89 | ###子模式的命令
90 | CTRL-X CTRL-D 补全定义过的标识符
91 | CTRL-X CTRL-E 上滚
92 | CTRL-X CTRL-F 补全文件名
93 | CTRL-X CTRL-I 补全标识符
94 | CTRL-X CTRL-K 从字典补全标识符
95 | CTRL-X CTRL-L 补全完整的行
96 | CTRL-X CTRL-N 下一个补全
97 | CTRL-X CTRL-O 全能 (omni) 补全
98 | CTRL-X CTRL-P 上一个补全
99 | CTRL-X CTRL-S 拼写建议
100 | CTRL-X CTRL-T 从同义词词典补全标识符
101 | CTRL-X CTRL-U 用 'completefunc' 补全
102 | CTRL-X CTRL-V 如同 : 命令行那样补全
103 | CTRL-X CTRL-Y 下滚
104 | CTRL-X CTRL-] 补全标签
105 | CTRL-X s 拼写建议
106 | ###普通模式
107 | CTRL-@ 不用
108 | CTRL-A 2 把 N 加到光标所在/之后的数值上
109 | CTRL-B 1 反向 (Back) 滚动 N 屏
110 | CTRL-C 终止当前的 (搜索) 命令
111 | CTRL-D 向下 (Down) 滚动 N 行 (缺省: 半屏)
112 | CTRL-E 向上滚动 N 行 (附加 (Extra) N 行)
113 | CTRL-F 1 向前 (Forward) 滚动 N 屏
114 | CTRL-G 显示当前文件名和位置
115 | 1 等同于 "h"
116 | CTRL-H 1 等同于 "h"
117 | 1 跳转到跳转表里第 N 个较新的项目
118 | CTRL-I 1 等同于
119 | 1 等同于 "j"
120 | CTRL-J 1 等同于 "j"
121 | CTRL-K 不用
122 | CTRL-L 重画屏幕
123 | 1 光标移到 N 行下面的第一个 CHAR
124 | CTRL-M 1 等同于
125 | CTRL-N 1 等同于 "j"
126 | CTRL-O 1 跳转到跳转表里第 N 个较旧的项目
127 | CTRL-P 1 等同于 "k"
128 | CTRL-Q (用于终端控制流)
129 | CTRL-R 2 重做 'u' 撤消的改变
130 | CTRL-S (用于终端控制流)
131 | CTRL-T 跳转到标签列表的第 N 个较老的标签 (Tag)
132 | CTRL-U 上滚 (Upwards) N 行 (缺省: 半屏)
133 | CTRL-V 开始面向列块的可视 (Visual) 模式
134 | CTRL-W {char} 窗口命令,见 |CTRL-W|
135 | CTRL-X 2 从光标所在/之后的数值上减去 N
136 | CTRL-Y 下滚 N 行
137 | CTRL-Z 暂停程序 (或者启动新的外壳)
138 | CTRL-[ 不用
139 | CTRL-\ CTRL-N 进入普通 (Normal) 模式 (空动作)
140 | CTRL-\ CTRL-G 进入 'insertmode' 指定的模式
141 | CTRL-\ a - z 保留作扩展用
142 | CTRL-\ 其它 不用
143 | CTRL-] :ta 到光标所在的标识符
144 | CTRL-^ 编辑第 N 个轮换文件 (等价于 ":e #N")
145 | CTRL-_ 不用
146 | 1 等同于 "l"
147 | !{motion}{filter}2 通过 {filter} 命令过滤 Nmove 文本
148 | !!{filter} 2 通过 {filter} 命令过滤 N 行
149 | "{a-zA-Z0-9.%#:-"} 指定下次删除、抽出或放置使用的寄存器{a-zA-Z0-9.%#:-"} (大写用于添加)({.%#:} 只能用于放置)
150 | # 1 反向搜索第 N 次出现的光标所在的标识符
151 | $ 1 光标移动到往下第 N 行的行尾之后
152 | % 1 查找本行下一个 (花/方) 括号,并转到其匹配的括号上,或者转到匹配的注释配对上,或者转到匹配的预处理命令上。
153 | {count}% 1 转到文件的百分之 N 的位置上
154 | & 2 重复上次 :s
155 | '{a-zA-Z0-9} 1 光标移动到位置标记 {a-zA-Z0-9} 所在行的第一个 CHAR 上
156 | '' 1 光标移动到最近一次跳转之前所在行的第一个CHAR 上
157 | '( 1 光标移动到当前句子的首部所在行的第一个 CHAR上
158 | ') 1 光标移动到当前句子的尾部所在行的第一个 CHAR上
159 | '< 1 光标移动到当前缓冲区高亮区开始/曾经开始的行的第一个 CHAR 上。
160 | '> 1 光标移动到当前缓冲区高亮区结束/曾经结束的行的第一个 CHAR 上。
161 | '[ 1 光标移动到当前缓冲区最近操作/放置的文本的首部所在行的第一个 CHAR 上
162 | '] 1 光标移动到当前缓冲区最近操作/放置的文本的尾部所在行的第一个 CHAR 上
163 | '{ 1 光标移动到当前段落的首部所在行的第一个 CHAR上
164 | '} 1 光标移动到当前段落的尾部所在行的第一个 CHAR上
165 | ( 1 光标回退 N 个句子
166 | ) 1 光标前进 N 个句子
167 | * 1 正向搜索第 N 次出现的光标所在的标识符
168 | + 1 等同于
169 | , 1 反方向重复最近的 f、t、F 或 T N 次
170 | - 1 光标移动到上方 N 行的第一个 CHAR 上
171 | . 2 重复最近的改变,其计数被 N 取代
172 | /{pattern} 1 正向搜索第 N 次出现的 {pattern}
173 | / 1 正向搜索最近一次搜索使用的 {pattern}
174 | 0 1 光标移动到本行的第一个字符上
175 | 1,2,3,4,5,6,7,8,9 附加于命令前,给出计数
176 | : 1 开始进入 Ex 命令
177 | {count}: 开始进入 Ex 命令,给出从当前行开始到下方N-1 行为止的行范围
178 | ; 1 重复最近的 f、t、F 或 T N 次
179 | <{motion} 2 左移 Nmove 文本行一个 'shiftwidth'
180 | << 2 左移 N 行一个 'shiftwidth'
181 | ={motion} 2 通过 "indent" 过滤 Nmove 文本行
182 | == 2 通过 "indent" 过滤 N 行
183 | >{motion} 2 右移 Nmove 文本行一个 'shiftwidth'
184 | >> 2 右移 N 行一个 'shiftwidth'
185 | ?{pattern} 1 反向搜索第 N 次出现的 {pattern}
186 | ? 1 反向搜索最近一次搜索使用的 {pattern}
187 | @{a-z} 2 执行 {a-z} 寄存器的内容 N 次
188 | @: 重复上次的 ":" 命令 N 次
189 | @@ 2 重复上次的 @{a-z} N 次
190 | A 2 在行尾附加文本 N 次
191 | B 1 光标反向移动 N 个 WORD (字串)
192 | ["x]C 2 从光标位置到行尾部分,再加上 N-1 行进行修改[到缓冲区 (译者注: 应为寄存器,下同) x];等价于 "c$"
193 | ["x]D 2 删除位置到行尾部分,再加上 N-1 行的字符 [到缓冲区 (见上) x];等价于 "d$"
194 | E 1 光标正向移动到第 N 个 WORD 的结束处
195 | F{char} 1 光标左移到第 N 次出现的 {char} 上
196 | G 1 光标移动到第 N 行,缺省是最后一行
197 | H 1 光标移动到屏幕顶部开始算的第 N 行
198 | I 2 在本行第一个 CHAR 之前插入文本 N 次
199 | J 2 连接 (Join) N 行;缺省为 2
200 | K 查找光标所在的关键字 (Keyword),使用'keywordprg' 的定义
201 | L 1 光标移动到屏幕底部开始算的第 N 行
202 | M 1 光标移动到屏幕的中间一行
203 | N 1 反方向重复最近的 '/' 或 '?' N 次
204 | O 2 在光标上方开始一个新行,并插入文本,重复 N次
205 | ["x]P 2 在光标放置文本 [到缓冲区 (见上) x] N 次
206 | Q 切换到 "Ex" 模式
207 | R 2 进入替换模式: 覆盖存在的字符,重复输入文本N-1 次
208 | ["x]S 2 删除 N 行 [到缓冲区 (见上) x]] 并开始输入;等价于 "cc"
209 | T{char} 1 光标移动到左侧第 N 次出现的 {char} 之前
210 | U 2 撤消一行内所有最近的改变
211 | V 进入面向行的可视 (Visual) 模式
212 | W 1 光标前移 N 个 WORD
213 | ["x]X 2 删除光标前的 N 个字符 [到缓冲区 (见上) x]
214 | ["x]Y 抽出 N 行 [到缓冲区 (见上) x];等价于 "yy"
215 | ZZ 如果修改过,保存当前文件,然后退出
216 | ZQ 无论如何退出当前文件
217 | [{char} 方括号命令 (见下 |[|)
218 | \ 不用
219 | ]{char} 方括号命令 (见下 |]|)
220 | ^ 1 光标移动到本行的第一个 CHAR 上
221 | _ 1 光标移动到下方第 N - 1 行的第一个 CHAR 上
222 | `{a-zA-Z0-9} 1 光标移动到位置标记 {a-zA-Z0-9}
223 | `( 1 光标移动当前句子的开始处
224 | `) 1 光标移动当前句子的结束处
225 | `< 1 光标移动高亮区域的开始处
226 | `> 1 光标移动高亮区域的结束处
227 | `[ 1 光标移动最近一次操作/放置的文本的开始处
228 | `] 1 光标移动最近一次操作/放置的文本的结束处
229 | `` 1 光标移动最近一次跳转的位置
230 | `{ 1 光标移动当前段落的开始处
231 | `} 1 光标移动当前段落的结束处
232 | a 2 在光标处附加文本 N 次
233 | b 1 光标反向移动 N 个单词
234 | ["x]c{motion} 2 删除 Nmove 文本 [到缓冲区 (见上) x] 并开始编辑
235 | ["x]cc 2 删除 N 行 [到缓冲区 (见上) x] 并开始编辑
236 | ["x]d{motion} 2 删除 Nmove 文本 [到缓冲区 (见上) x]
237 | ["x]dd 2 删除 N 行 [到缓冲区 (见上) x]]
238 | do 2 等同于 ":diffget"
239 | dp 2 等同于 ":diffput"
240 | e 1 光标正向移动到第 N 个单词的结束处
241 | f{char} 1 光标右移到第 N 次出现的 {char} 上
242 | g{char} 扩展命令,见下 |g|
243 | h 1 光标左移 N 个字符
244 | i 2 在光标前插入文本 N 次
245 | j 1 光标下移 N 行
246 | k 1 光标上移 N 行
247 | l 1 光标右移 N 个字符
248 | m{A-Za-z} 在光标位置处设置位置标记 {A-Za-z}
249 | n 1 重复最近的 '/' 或 '?' N 次
250 | o 2 在光标下方开始一个新行,并插入文本,重复 N次
251 | ["x]p 2 在光标后放置文本 [从寄存器 x] N 次
252 | q{0-9a-zA-Z"} 记录输入的字符到命令寄存器 {0-9a-zA-Z"}(大写用于添加)
253 | q (在记录时) 停止记录
254 | q: 在命令行窗口里编辑 : 命令行
255 | q/ 在命令行窗口里编辑 / 命令行
256 | q? 在命令行窗口里编辑 ? 命令行
257 | r{char} 2 用 {char} 替换 N 个字符
258 | ["x]s 2 (替换) 删除 N 个字符 [到缓冲区 (见上) x] 并开始输入
259 | t{char} 1 光标移动到右侧第 N 次出现的 {char} 之前
260 | u 2 撤消改变
261 | v 开始面向字符的可视 (Visual) 模式
262 | w 1 光标前移 N 个单词
263 | ["x]x 2 删除光标开始的 N 个字符 [到缓冲区 (见上) x]
264 | ["x]y{motion} 抽出 Nmove 文本 [到缓冲区 (见上) x]
265 | ["x]yy 抽出 N 行 [到缓冲区 (见上) x]
266 | z{char} 'z' 开始的命令,见下 |z|
267 | { 1 光标反向移动 N 个段落
268 | | 1 光标移到第 N 列
269 | } 1 光标正向移动 N 个段落
270 | ~ 2 'tildeop' 关闭时: 切换光标所在处开始的 N 个字符的大小写,并右移光标 N 个字符
271 | ~{motion} 'tildeop' 打开时: 切换 Nmove 文本的大小写
272 | 1 等同于 "G"
273 | 1 等同于 "gg"
274 | 1 等同于 "b"
275 |
276 | ":ta" 到鼠标点击所在的单词上
277 | 1 等同于 "w"
278 | 等同于 "CTRL-T"
279 | ["x] 2 等同于 "x"
280 | {count} 删除 {count} 最后的一位数字
281 | 1 等同于 "j"
282 | 1 等同于 "$"
283 | 等同于
284 | 打开帮助窗口
285 | 1 等同于 "0"
286 | 2 等同于 "i"
287 | 1 等同于 "h"
288 | 1 移动光标到鼠标点击处
289 | 2 等同于在鼠标点击处 "gP"
290 | 等同于 CTRL-F
291 | 等同于 CTRL-B
292 | 1 等同于 "l"
293 | 开始可视模式,移动光标到鼠标点击处
294 | 1 等同于 CTRL-F
295 | 1 等同于 "b"
296 | 等同于在鼠标点击处 "*"
297 | 1 等同于 "w"
298 | 等同于在鼠标点击处 "#"
299 | 1 等同于 CTRL-B
300 | 2 等同于 "u"
301 | 1 等同于 "k"
302 | 窗口向下滚动三行
303 | 窗口向下滚动完整一页
304 | 窗口向上滚动三行
305 | 窗口向上滚动完整一页
306 | 窗口向左滚动六列
307 | 窗口向左滚动完整一页
308 | 窗口向右滚动六列
309 | 窗口向右滚动完整一页
310 | ###文本对象
311 | a" 双引号字符串
312 | a' 单引号字符串
313 | a( 等同于 ab
314 | a) 等同于 ab
315 | a< "一个 <> 块" 从 '<' 到匹配的 '>'
316 | a> 等同于 a<
317 | aB "一个大块" 从 "[{" 到 "]}" (带上括号)
318 | aW "一个字串" (带上空白)
319 | a[ "一个 [] 块" 从 '[' 到匹配的 ']'
320 | a] 等同于 a[
321 | a` 反引号字符串
322 | ab "一个块" 从 "[(" 到 "])" (带上括号)
323 | ap "一个段落" (带上空白)
324 | as "一个句子" (带上空白)
325 | at "一个标签块" (带上空白)
326 | aw "一个单词" (带上空白)
327 | a{ 等同于 aB
328 | a} 等同于 aB
329 | i" 双引号字符串,不带引号
330 | i' 单引号字符串,不带引号
331 | i( 等同于 ib
332 | i) 等同于 ib
333 | i< "内含 <> 块" 从 '<' 到匹配的 '>'
334 | i> 等同于 i<
335 | iB "内含大块" 从 "[{" 到 "]}"
336 | iW "内含字串"
337 | i[ "内含 [] 块" 从 '[' 到匹配的 ']'
338 | i] 等同于 i[
339 | i` 反引号字符串,不带反引号
340 | ib "内含块" 从 "[(" 到 "])"
341 | ip "内含段落"
342 | is "内含句子"
343 | it "内含标签块"
344 | iw "内含单词"
345 | i{ 等同于 iB
346 | i} 等同于 iB
347 | ###窗口命令
348 | CTRL-W CTRL-B 等同于 "CTRL-W b"
349 | CTRL-W CTRL-C 等同于 "CTRL-W c"
350 | CTRL-W CTRL-D 等同于 "CTRL-W d"
351 | CTRL-W CTRL-F 等同于 "CTRL-W f"
352 | CTRL-W CTRL-G 等同于 "CTRL-W g .."
353 | CTRL-W CTRL-H 等同于 "CTRL-W h"
354 | CTRL-W CTRL-I 等同于 "CTRL-W i"
355 | CTRL-W CTRL-J 等同于 "CTRL-W j"
356 | CTRL-W CTRL-K 等同于 "CTRL-W k"
357 | CTRL-W CTRL-L 等同于 "CTRL-W l"
358 | CTRL-W CTRL-N 等同于 "CTRL-W n"
359 | CTRL-W CTRL-O 等同于 "CTRL-W o"
360 | CTRL-W CTRL-P 等同于 "CTRL-W p"
361 | CTRL-W CTRL-Q 等同于 "CTRL-W q"
362 | CTRL-W CTRL-R 等同于 "CTRL-W r"
363 | CTRL-W CTRL-S 等同于 "CTRL-W s"
364 | CTRL-W CTRL-T 等同于 "CTRL-W t"
365 | CTRL-W CTRL-V 等同于 "CTRL-W v"
366 | CTRL-W CTRL-W 等同于 "CTRL-W w"
367 | CTRL-W CTRL-X 等同于 "CTRL-W x"
368 | CTRL-W CTRL-Z 等同于 "CTRL-W z"
369 | CTRL-W CTRL-] 等同于 "CTRL-W ]"
370 | CTRL-W CTRL-^ 等同于 "CTRL-W ^"
371 | CTRL-W CTRL-_ 等同于 "CTRL-W _"
372 | CTRL-W + 增加当前窗口高度 N 行
373 | CTRL-W - 减少当前窗口高度 N 行
374 | CTRL-W < 减少当前窗口宽度 N 列
375 | CTRL-W = 使得所有窗口同宽同高
376 | CTRL-W > 增加当前窗口宽度 N 列
377 | CTRL-W H 移动当前窗口到最左端
378 | CTRL-W J 移动当前窗口到最底部
379 | CTRL-W K 移动当前窗口到最顶部
380 | CTRL-W L 移动当前窗口到最右端
381 | CTRL-W P 跳转到预览窗口
382 | CTRL-W R 向上旋转窗口 N 次
383 | CTRL-W S 等同于 "CTRL-W s"
384 | CTRL-W T 移动当前窗口到新标签页
385 | CTRL-W W 跳转到前面第 N 个窗口 (回绕)
386 | CTRL-W ] 分割窗口并跳转到光标所在的标签上
387 | CTRL-W ^ 分割窗口并编辑轮换文件 N
388 | CTRL-W _ 设置当前窗口高度为 N (缺省: 尽量大)
389 | CTRL-W b 跳转到底部的窗口
390 | CTRL-W c 关闭当前窗口 (类似于 |:close|)
391 | CTRL-W d 分割窗口并跳转到光标所在的定义上
392 | CTRL-W f 分割窗口并跳转到光标所在的文件名上
393 | CTRL-W F 分割窗口并编辑光标所在的文件名,然后跳转到文件名后给出的行号上。
394 | CTRL-W g CTRL-] 分割窗口并在光标所在的标签上执行 |:tjump|
395 | CTRL-W g ] 分割窗口并在光标所在的标签上执行 |:tselect|
396 | CTRL-W g } 在光标所在的标签上执行 |:ptjump|
397 | CTRL-W g f 在新的标签页里编辑光标所在的文件名
398 | CTRL-W g F 在新的标签页里编辑光标所在的文件名然后跳转到文件名后给出的行号上。
399 | CTRL-W h 跳转到左面第 N 个的窗口 (在首个窗口上停止)
400 | CTRL-W i 分割窗口并跳转到光标所在的标识符的声明上
401 | CTRL-W j 跳转到下面第 N 个的窗口 (在最后窗口上停止)
402 | CTRL-W k 跳转到上面第 N 个的窗口 (在首个窗口上停止)
403 | CTRL-W l 跳转到右面第 N 个的窗口 (在最后窗口上停止)
404 | CTRL-W n 打开新窗口,N 行高
405 | CTRL-W o 关闭除了当前窗口以外的所有窗口 (类似于|:only|)
406 | CTRL-W p 转到前面一个 (最近访问的) 窗口
407 | CTRL-W q 退出当前窗口 (类似于 |:quit|)
408 | CTRL-W r 向下旋转窗口 N 次
409 | CTRL-W s 分割当前窗口为两部分,新的窗口 N 行高
410 | CTRL-W t 跳转到顶部窗口
411 | CTRL-W v 垂直分割当前窗口,新的窗口 N 列宽
412 | CTRL-W w 转到后面第 N 个窗口 (回绕)
413 | CTRL-W x 交换当前和第 N 个窗口 (缺省: 下一个窗口)
414 | CTRL-W z 关闭预览窗口
415 | CTRL-W | 设置窗口宽度为 N 列
416 | CTRL-W } 在预览窗口里显示光标所在的标签
417 | CTRL-W 等同于 "CTRL-W j"
418 | CTRL-W 等同于 "CTRL-W k"
419 | CTRL-W 等同于 "CTRL-W h"
420 | CTRL-W 等同于 "CTRL-W l"
421 | ###方括号命令
422 | [ CTRL-D 跳转到第一个在当前文件和它包含的头文件里匹配光标所在的单词的 #define,从当前文件的头部开始
423 | [ CTRL-I 跳转到第一个在当前文件和它包含的头文件里匹配光标所在单词的位置,从当前文件头部开始
424 | [# 1 光标移动到前面第 N 个未匹配的 #if、#else 或者 #ifdef
425 | [' 1 光标移动到前面的小写位置标记,定位在它所在行的第一个非空白字符上
426 | [( 1 光标移动到前面第 N 个未匹配的 '('
427 | [* 1 等同于 "[/"
428 | [` 1 光标移动到前一个小写位置标记
429 | [/ 1 光标移动到前面第 N 个 C 注释的开始处
430 | [D 列出在当前文件和它包含的头文件里匹配光标所在的单词的所有定义,从当前文件的头部开始
431 | [I 列出在当前文件和它包含的头文件里匹配光标所在单词的所有位置,从当前文件的头部开始
432 | [P 2 等同于 "[p"
433 | [[ 1 光标后退 N 个小节
434 | [] 1 光标后退 N 个 SECTION
435 | [c 1 光标后退 N 个更改开始的地方
436 | [d 显示第一个在当前文件和它包含的头文件里匹配光标所在的单词的 #define,从当前文件的头部开始
437 | [f 等同于 "gf"
438 | [i 显示第一个在当前文件和它包含的头文件里匹配光标所在单词的位置,从当前文件的头部开始
439 | [m 1 光标后退 N 个成员函数的开始
440 | [p 2 类似于 "P",但调整当前行的缩进
441 | [s 1 移动到前一个拼写错误的单词
442 | [z 1 移动到打开的折叠的开始
443 | [{ 1 光标后退 N 个未匹配的 '{'
444 | [ 2 等同于 "[p"
445 | ] CTRL-D 跳转到第一个在当前文件和它包含的头文件里匹配光标所在的单词的 #define,从光标位置开始
446 | ] CTRL-I 跳转到第一个在当前文件和它包含的头文件里匹配光标所在单词的位置,从光标位置开始
447 | ]# 1 光标移动到后面第 N 个未匹配的 #endif、#else
448 | ]' 1 光标移动到后面的小写位置标记,定位在它所在行的第一个非空白字符上
449 | ]( 1 光标移动到后面第 N 个未匹配的 ')'
450 | ]* 1 等同于 "]/"
451 | ]` 1 光标移动到后一个小写位置标记
452 | ]/ 1 光标移动到后面第 N 个 C 注释的结尾处
453 | ]D 列出在当前文件和它包含的头文件里匹配光标所在的单词的所有定义,从光标位置开始
454 | ]I 列出在当前文件和它包含的头文件里匹配光标所在单词的所有位置,从光标位置开始
455 | ]P 2 等同于 "[p"
456 | ]] 1 光标前进 N 个小节
457 | ]c 1 光标前进 N 个更改开始的地方
458 | ]d 显示第一个在当前文件和它包含的头文件里匹配光标所在的单词的 #define,从光标位置开始
459 | ]f 等同于 "gf"
460 | ]i 显示第一个在当前文件和它包含的头文件里匹配光标所在单词的位置,从光标位置开始
461 | ]m 1 光标前进 N 个成员函数的结尾
462 | ]p 2 类似于 "p",但调整当前行的缩进
463 | ]s 1 移动到后一个拼写错误的单词
464 | ]z 1 移动到打开的折叠的结尾处
465 | ]{ 1 光标前进 N 个未匹配的 '}'
466 | ] 2 等同于 "]p"
467 | ###'g' 开始的命令
468 | g CTRL-A 只有在编译时加入了 MEM_PROFILE 时才有定义:转储内存内容
469 | g CTRL-G 显示当前光标位置
470 | g CTRL-H 启动选择列块模式
471 | g CTRL-] |:tjump| 到光标所在的标签上
472 | g# 1 类似于 "#",但不使用 "\<" 和 "\>"
473 | g$ 1 'wrap' 关闭时转到当前行最右侧屏幕上可见的字符'wrap' 打开时转到当前屏幕行最右侧的字符
474 | g& 2 在所有行上重复上次的 ":s"
475 | g'{mark} 1 类似于 |'|,但不改变跳转表
476 | g`{mark} 1 类似于 |`|,但不改表跳转表
477 | g* 1 类似于 "*",但不使用 "\<" 和 "\>"
478 | g0 1 'wrap' 关闭时转到当前行最左侧屏幕上可见的字符'wrap' 打开时转到当前屏幕行最左侧的字符
479 | g8 显示光标所在的 UTF-8 字符的十六进制字节码
480 | g< 显示上次的命令输出
481 | g? 2 Rot13 编码操作符
482 | g?? 2 Rot13 编码当前行
483 | g?g? 2 Rot13 编码当前行
484 | gD 1 转到当前文件的光标所在单词的定义
485 | gE 1 反向转移到上一个 WORD 的结尾处
486 | gH 启动选择行模式
487 | gI 2 类似于 "I",但总是从第一列开始
488 | gJ 2 连接行,不插入空格
489 | ["x]gP 2 在光标签放置文本 [从寄存器 x] N 次,光标留在插入文本之后
490 | gR 2 进入虚拟替换模式
491 | gU{motion} 2 使得 Nmove 文本全部大写
492 | gV 在执行选择模式下的映射或者菜单时,不要重复选择过去的可视区域
493 | g] :tselect 到光标所在的标签上
494 | g^ 1 'wrap' 关闭时转到当前行最左侧屏幕上可见的非空白字符'wrap' 打开时转到当前屏幕行最左侧的非空白字符
495 | ga 打印光标所在处的字符的 ascii 值
496 | gd 1 转到当前函数里当前光标所在的单词的定义
497 | ge 1 反向转到前一个单词的结尾处
498 | gf 开始编辑当前光标所在的名字对应的文件
499 | gF 开始编辑光标所在的文件名并跳转到文件名后的行号上。
500 | gg 1 光标移动到第 N 行,缺省是第一行
501 | gh 开始选择模式
502 | gi 2 类似于 "i",但先移动到 |'^| 位置标记
503 | gj 1 类似于 "j",但 'wrap' 打开时往下 N 个屏幕行
504 | gk 1 类似于 "k",但 'wrap' 打开时往上 N 个屏幕行
505 | gm 1 转到屏幕行正中间的那个字符
506 | go 1 光标移动到缓冲区的第 N 个字节
507 | ["x]gp 2 在光标后面放置文本 [从寄存器 x] N 次,光标留在后面
508 | gq{motion} 2 排版 Nmove 文本
509 | gr{char} 2 虚拟替换 N 个字符为 {char}
510 | gs 睡眠 N 秒 (缺省 1)
511 | gu{motion} 2 使得 Nmove 文本全部小写
512 | gv 重新选择上次的可视区域
513 | gw{motion} 2 排版 Nmove 文本并保持光标位置
514 | gx 执行光标下的文件名对应的应用程序 (仅限于|netrw| 插件)
515 | g@{motion} 调用 'operatorfunc'
516 | g~{motion} 2 改变 Nmove 文本的大小写
517 | g 1 等同于 "gj"
518 | g 1 等同于 "g$"
519 | g 1 等同于 "g0"
520 | g 等同于
521 | g 等同于
522 | g 等同于
523 | g 1 等同于 "gk"
524 | ###'z' 开始的命令
525 | z 重画,光标移动到窗口的顶行的第一个非空白字符
526 | z{height} 重画,使得窗口高度为 {height} 行
527 | z+ 光标移动到第 N 行 (缺省为窗口之后的第一行),其它同 "z"
528 | z- 重画,光标移动到窗口末行的第一个非空白字符
529 | z. 重画,光标移动到窗口的中间行的第一个非空白字符
530 | z= 给出拼写建议
531 | zA 递归打开一个关闭的折叠或关闭一个打开的折叠
532 | zC 递归关闭折叠
533 | zD 递归删除折叠
534 | zE 除去所有折叠
535 | zF 为 N 行建立折叠
536 | zG 把单词标记为拼写正确 (good)
537 | zM 设置 'foldlevel' 为零
538 | zN 置位 'foldenable'
539 | zO 递归打开折叠
540 | zR 设置 'foldlevel' 为最大折叠级别
541 | zW 把单词标记为拼写错误 (wrong)
542 | zX 重新应用 'foldlevel'
543 | z^ 光标移动到第 N 行 (缺省为窗口之前的一行),其它同 "z-"
544 | za 打开关闭的折叠,或关闭打开的折叠
545 | zb 重画,光标在窗口底行
546 | zc 关闭折叠
547 | zd 删除折叠
548 | ze 'wrap' 关闭时,水平滚动使得光标定位到屏幕的尾部 (最右侧)
549 | zf{motion} 为 Nmove 文本建立折叠
550 | zg 把单词标记为拼写正确 (good)
551 | zh 'wrap' 关闭时,水平右滚屏幕 N 个字符
552 | zi 切换 'foldenable'
553 | zj 1 移动到下一个折叠的开始处
554 | zk 1 移动到前一个折叠的结束处
555 | zl 'wrap' 关闭时,水平左滚屏幕 N 个字符
556 | zm 从 'foldlevel' 减一
557 | zn 复位 'foldenable'
558 | zo 打开折叠
559 | zr 给 'foldlevel' 加一
560 | zs 'wrap' 关闭时,水平滚动使得光标定位到屏幕的起始处 (最左侧)
561 | zt 重画,光标移动到窗口的顶部
562 | zw 把单词标记为拼写错误 (wrong)
563 | zv 打开足够的折叠,使得当前行可见
564 | zx 重新应用 'foldlevel' 然后执行 "zv"
565 | zz 重画,光标移动到窗口的中间行
566 | z 等同于 "zh"
567 | z 等同于 "zl"
568 | ###可视模式
569 | CTRL-\ CTRL-N 结束可视模式
570 | CTRL-\ CTRL-G 转到 'insertmode' 指定的模式
571 | CTRL-C 结束可视模式
572 | CTRL-G 在可视模式和选择模式间切换
573 | 2 选择模式: 删除高亮区域
574 | CTRL-H 2 等同于
575 | CTRL-O 从选择模式切换到可视模式,只限于下个命令
576 | CTRL-V 使得可视模式面向列块,或者退出可视模式
577 | 结束可视模式
578 | CTRL-] 跳转到高亮的标签上
579 | !{filter} 2 通过外部命令 {filter} 过滤高亮行
580 | : 使用高亮行作为范围,开始一个命令行
581 | < 2 左移高亮行一个 'shiftwidth'
582 | = 2 用 {equalprg} 选项指定的外部程序过滤高亮行
583 | > 2 右移高亮行一个 'shiftwidth'
584 | A 2 列块模式下: 在高亮区域的所有行后附加相同的文本
585 | C 2 删除高亮行,并开始插入
586 | D 2 删除高亮行
587 | I 2 列块模式: 在所有高亮行之前插入相同的文本
588 | J 2 连接高亮行
589 | K 在高亮区域上运行 'keywordprg'
590 | O 水平移动到区域的另外一侧
591 | Q 不启动 Ex 模式
592 | R 2 删除高亮行并开始插入
593 | S 2 删除高亮行并开始插入
594 | U 2 使得高亮区域全变大写
595 | V 使得可视区域面向行,或者退出可视模式
596 | X 2 删除高亮区域
597 | Y 抽出高亮行
598 | a" 扩展高亮区域,使包含一个双引号字符串
599 | a' 扩展高亮区域,使包含一个单引号字符串
600 | a( 等同于 ab
601 | a) 等同于 ab
602 | a< 扩展高亮区域,使包含一个 <> 块
603 | a> 等同于 a<
604 | aB 扩展高亮区域,使包含一个 {} 块
605 | aW 扩展高亮区域,使包含 "一个 WORD"
606 | a[ 扩展高亮区域,使包含一个 [] 块
607 | a] 等同于 a[
608 | a` 扩展高亮区域,使包含一个反引号字符串
609 | ab 扩展高亮区域,使包含一个 () 块
610 | ap 扩展高亮区域,使包含一个段落
611 | as 扩展高亮区域,使包含一个句子
612 | at 扩展高亮区域,使包含一个标签块
613 | aw 扩展高亮区域,使包含 "一个单词"
614 | a{ 等同于 aB
615 | a} 等同于 aB
616 | c 2 删除高亮区域,并开始插入
617 | d 2 删除高亮区域
618 | gJ 2 连接高亮行,不插入空格
619 | gq 2 排版高亮行
620 | gv 交换现在和以前的高亮区域
621 | i" 扩展高亮区域,使包含一个双引号字符串 (但不含引号)
622 | i' 扩展高亮区域,使包含一个单引号字符串 (但不含引号)
623 | i( 等同于 ib
624 | i) 等同于 ib
625 | i< 扩展高亮区域,使包含内含 <> 块
626 | i> 等同于 i<
627 | iB 扩展高亮区域,使包含内含 {} 块
628 | iW 扩展高亮区域,使包含 "内含 WORD"
629 | i[ 扩展高亮区域,使包含内含 [] 块
630 | i] 等同于 i[
631 | i` 扩展高亮区域,使包含一个反引号字符串 (但不含反引号)
632 | ib 扩展高亮区域,使包含内含 () 块
633 | ip 扩展高亮区域,使包含内含段落
634 | is 扩展高亮区域,使包含内含句子
635 | it 扩展高亮区域,使包含内含标签块
636 | iw 扩展高亮区域,使包含 "内含单词"
637 | i{ 等同于 iB
638 | i} 等同于 iB
639 | o 移动光标到区域的另一侧
640 | r 2 删除高亮区域,并开始插入
641 | s 2 删除高亮区域,并开始插入
642 | u 2 使得高亮区域全变小写
643 | v 使得可视模式面向字符,或者退出可视模式
644 | x 2 删除高亮区域
645 | y 抽出高亮区域
646 | ~ 2 改变高亮区域的大小写
647 | ###命令行编辑
648 | CTRL-@ 不用
649 | CTRL-A 使用光标前面的模式进行补全,并插入所有的匹配
650 | CTRL-B 光标移动到命令行开始的地方
651 | CTRL-C 等同于
652 | CTRL-D 列出光标前面模式的所有补全
653 | CTRL-E 光标移动到命令行结束的地方
654 | CTRL-F 'cedit' 的缺省值: 打开命令行窗口;否则不用
655 | CTRL-G 不用
656 | 删除光标前面的字符
657 | {char1} {char2} 'digraph' 打开时,输入二合字母
658 | CTRL-H 等同于
659 | 如果 'wildchar' 是 : 补全光标前面的模式
660 | 等同于 CTRL-P
661 | 'wildchar' 补全光标前面的模式 (缺省: )
662 | CTRL-I 等同于
663 | 等同于
664 | CTRL-J 等同于
665 | CTRL-K {char1} {char2}输入二合字母
666 | CTRL-L 补全光标前的模式,并插入最长的公共子串
667 | 执行输入的命令
668 | CTRL-M 等同于
669 | CTRL-N 使用 'wildchar' 并有多个匹配: 转到下一个匹配,不然: 等同于
670 | CTRL-O 不同
671 | CTRL-P 使用 'wildchar' 并有多个匹配: 转到上一个匹配,不然: 等同于
672 | CTRL-Q 等同于 CTRL-V,除非用于终端控制流
673 | CTRL-R {0-9a-z"%#*:= CTRL-F CTRL-P CTRL-W CTRL-A}插入寄存器的内容或特殊对象到光标所在的地方,如同直接输入那样
674 | CTRL-R CTRL-R {0-9a-z"%#*:= CTRL-F CTRL-P CTRL-W CTRL-A}按本义插入寄存器的内容或特殊对象到光标所在的地方
675 | CTRL-S (用于终端控制流)
676 | CTRL-T 不用
677 | CTRL-U 删除所有字符
678 | CTRL-V 按本义插入下一个非数字字符,或者插入其后三位数字所代表的单个字节。
679 | CTRL-W 删除光标前面的单词
680 | CTRL-X 不用 (保留作补全用)
681 | CTRL-Y 复制 (抽出) 无模式的选择
682 | CTRL-Z 不用 (保留作暂停用)
683 | 放弃命令行,不执行
684 | CTRL-[ 等同于
685 | CTRL-\ CTRL-N 转到普通模式,放弃命令行
686 | CTRL-\ CTRL-G 转到 'insertmode' 指定的模式,放弃命令行
687 | CTRL-\ a - d 保留给扩展用
688 | CTRL-\ e {expr} 以 {expr} 的结果替换命令行
689 | CTRL-\ f - z 保留给扩展用
690 | CTRL-\ 其它 不用
691 | CTRL-] 激活缩写
692 | CTRL-^ 切换 |:lmap| 映射的使用
693 | CTRL-_ 'allowrevins' 打开时: 改变语言 (希伯来,波斯)
694 | 删除光标所在的字符
695 |
696 | 光标左移
697 | 光标左移一个单词
698 | 光标左移一个单词
699 | 光标右移
700 | 光标右移一个单词
701 | 光标右移一个单词
702 | 从历史中调入匹配光标前模式的前一个命令行
703 | 从历史中调入前一个命令行
704 | 从历史中调入匹配光标前模式的后一个命令行
705 | 从历史中调入后一个命令行
706 | 光标移动到命令行开始的地方
707 | 光标移动到命令行结束的地方
708 | 等同于
709 | 等同于
710 | 切换插入/替换模式
711 | 光标移动到鼠标点击的地方
712 | ###EX 命令
713 | :! 过滤行,或可通过外部命令执行之
714 | :!! 重复上次的 ":!" 命令
715 | :# 等同于 ":number"
716 | :& 重复上次的 ":substitute"
717 | :* 执行寄存器的内容
718 | :< 将行左移一个 'shiftwidth'
719 | := 显示光标所在的行号
720 | :> 将行右移一个 'shiftwidth'
721 | :@ 执行寄存器的内容
722 | :@@ 重复上次的 ":@"
723 | :N[ext] 转到参数列表的上一个文件
724 | :P[rint] 显示行
725 | :X 请求加密密钥
726 | :a[ppend] 附加文本
727 | :ab[breviate] 输入缩写
728 | :abc[lear] 删除所有的缩写
729 | :abo[veleft] 使得分割的窗口出现在左侧或者上方
730 | :al[l] 为参数列表的每个文件打开一个窗口
731 | :am[enu] 为所有模式输入菜单项
732 | :an[oremenu] 为所有模式输入菜单项,不会被重新映射
733 | :ar[gs] 显示参数列表
734 | :arga[dd] 增加项目到参数列表中
735 | :argd[elete] 从参数列表中删除项目
736 | :arge[dit] 增加项目到参数列表中并编辑之
737 | :argdo 在参数列表上的所有项目上执行一个命令
738 | :argg[lobal] 定义全局参数列表
739 | :argl[ocal] 定义本地参数列表
740 | :argu[ment] 转到参数列表一个指定的文件
741 | :as[cii] 显示光标所在的字符的 ascii 值
742 | :au[tocmd] 输入或者显示自动命令
743 | :aug[roup] 选择要用的自动命令组
744 | :aun[menu] 删除所有模式下的菜单
745 | :b[uffer] 转到缓冲区列表里的特定缓冲区
746 | :bN[ext] 转到缓冲区列表里的上一个缓冲区
747 | :ba[ll] 为缓冲区列表里的每个缓冲区打开一个窗口
748 | :bad[d] 增加缓冲区到缓冲区列表
749 | :bd[elete] 从缓冲区列表删除缓冲区
750 | :be[have] 设置鼠标和选择行为
751 | :bel[owright] 使得分割的窗口出现在右侧或者下方
752 | :bf[irst] 转到缓冲区列表里的第一个缓冲区
753 | :bl[ast] 转到缓冲区列表里的最后一个缓冲区
754 | :bm[odified] 转到缓冲区列表里的下一个修改过的缓冲区
755 | :bn[ext] 转到缓冲区列表里的下一个缓冲区
756 | :bo[tright] 使得分割的窗口出现在最右侧或者下方
757 | :bp[revious] 转到缓冲区列表里的上一个缓冲区
758 | :br[ewind] 转到缓冲区列表里的第一个缓冲区
759 | :brea[k] 跳出 while 循环
760 | :breaka[dd] 增加调试器断点
761 | :breakd[el] 删除调试器断点
762 | :breakl[ist] 列出调试器断点
763 | :bro[wse] 使用文件选择对话框
764 | :bufdo 为所有列表内缓冲区执行命令
765 | :buffers 列出缓冲区列表里的所有文件
766 | :bun[load] 卸载指定的缓冲区
767 | :bw[ipeout] 真正删除一个缓冲区
768 | :c[hange] 替换一行或若干行
769 | :cN[ext] 跳转到上一个错误
770 | :cNf[ile] 跳转到前一个文件的最后一个错误
771 | :ca[bbrev] 类似于 ":abbreviate",但用于命令行模式
772 | :cabc[lear] 清除所有缩写,用于命令行模式
773 | :caddb[uffer] 通过缓冲区补充错误
774 | :cad[dexpr] 通过表达式补充错误
775 | :caddf[ile] 加入错误信息到当前 quickfix 列表
776 | :cal[l] 调用函数
777 | :cat[ch] :try 命令的一部分
778 | :cb[uffer] 分析错误信息并跳转到第一个
779 | :cc 跳转到特定的错误
780 | :ccl[ose] 关闭 quickfix 窗口
781 | :cd 改变目录
782 | :ce[nter] 排版行,使其居中对齐
783 | :cex[pr] 从表达式里读取错误并跳转到第一个
784 | :cf[ile] 读入含有错误信息的文件,并跳转到第一个
785 | :cfir[st] 跳转到指定的错误上,缺省为第一个
786 | :cgetb[uffer] 从缓冲区里得到错误
787 | :cgete[xpr] 从表达实里得到错误
788 | :cg[etfile] 读入含有错误信息的文件
789 | :cha[nges] 显示修改的列表
790 | :chd[ir] 改变当前目录
791 | :che[ckpath] 列出包含的头文件
792 | :checkt[ime] 检查载入缓冲区的时间标签
793 | :cl[ist] 列出所有错误
794 | :cla[st] 跳转到指定的错误上,缺省为最后一个
795 | :clo[se] 改变当前窗口
796 | :cm[ap] 类似于 ":map",但用于命令行模式
797 | :cmapc[lear] 清除所有映射,用于命令行模式
798 | :cme[nu] 为命令行模式增加菜单
799 | :cn[ext] 跳转到下一个错误
800 | :cnew[er] 跳转到下一个较新的错误列表
801 | :cnf[ile] 跳转到下一个文件的第一个错误
802 | :cno[remap] 类似于 ":noremap",但用于命令行模式
803 | :cnorea[bbrev] 类似于 ":noreabbrev",但用于命令行模式
804 | :cnoreme[nu] 类似于 ":noremenu",但用于命令行模式
805 | :co[py] 复制行
806 | :col[der] 跳转到上一个较老的错误列表
807 | :colo[rscheme] 载入特定的色彩方案
808 | :com[mand] 建立用户自定的命令
809 | :comc[lear] 清除所有用户自定的命令
810 | :comp[iler] 为特定编译器设定选项
811 | :con[tinue] 回到 :while 开始处
812 | :conf[irm] 需要确认时,提示用户
813 | :cope[n] 打开 quickfix 窗口
814 | :cp[revious] 跳转到上一个错误
815 | :cpf[ile] 跳转到上一个文件的最后一个错误
816 | :cq[uit] 退出 Vim,带错误码
817 | :cr[ewind] 跳到指定的错误,缺省为第一个
818 | :cs[cope] 执行 cscope 命令
819 | :cst[ag] 使用 cscope 来跳转到标签上
820 | :cu[nmap] 类似于 ":unmap",但用于命令行模式
821 | :cuna[bbrev] 类似于 ":unabbrev",但用于命令行模式
822 | :cunme[nu] 删除命令行的菜单
823 | :cw[indow] 打开或者关闭 quickfix 窗口
824 | :d[elete] 删除行
825 | :delm[arks] 删除位置标记
826 | :deb[ug] 在调试模式执行命令
827 | :debugg[reedy] 从正常的输入那里读取调试模式命令
828 | :delc[ommand] 删除用户自定的命令
829 | :delf[unction] 删除用户函数
830 | :dif[fupdate] 更新 'diff' 缓冲区
831 | :diffg[et] 删除当前缓冲区的所有差异
832 | :diffo[ff] 关闭 diff 模式
833 | :diffp[atch] 应用补丁然后显示差异
834 | :diffpu[t] 删除另外一个缓冲区的差异
835 | :diffs[plit] 显示和另外一个文件的差异
836 | :diffthis 使得当前窗口成为 diff 窗口
837 | :dig[raphs] 显示或者输入二合字母
838 | :di[splay] 显示寄存器
839 | :dj[ump] 跳转到 #define
840 | :dl[ist] 列出所有的 #define
841 | :do[autocmd] 在当前缓冲区应用自动命令
842 | :doautoa[ll] 在所有载入的缓冲区上应用自动命令
843 | :dr[op] 跳到编辑某文件的窗口,不成功则在当前窗口编辑之
844 | :ds[earch] 列出一个 #define
845 | :dsp[lit] 分割窗口并跳转到 #define
846 | :e[dit] 编辑文件
847 | :ea[rlier] 回到旧的改变,撤销
848 | :ec[ho] 回显表达式结果
849 | :echoe[rr] 类似于 :echo,如同错误一样显示和使用历史
850 | :echoh[l] 为 echo 等命令设置高亮
851 | :echom[sg] 等同于 :echo,在历史里放置消息
852 | :echon 等同于 :echo,但不留
853 | :el[se] :if 命令的一部分
854 | :elsei[f] :if 命令的一部分
855 | :em[enu] 按名字执行菜单
856 | :en[dif] 结束最近的 :if
857 | :endfo[r] 结束最近的 :for
858 | :endf[unction] 结束用户函数
859 | :endt[ry] 结束最近的 :try
860 | :endw[hile] 结束最近的 :while
861 | :ene[w] 编辑新的无名缓冲区
862 | :ex 等同于 ":edit"
863 | :exe[cute] 执行表达式的结果产生的字符串
864 | :exi[t] 等同于 ":xit"
865 | :exu[sage] Ex 命令总览
866 | :f[ile] 显示或者设置当前文件名
867 | :files 列出缓冲区列表的所有文件
868 | :filet[ype] 切换文件类型检测的打开/关闭
869 | :fin[d] 在 'path' 里找寻文件并编辑之
870 | :fina[lly] :try 命令的一部分
871 | :fini[sh] 退出 Vim 脚本的执行
872 | :fir[st] 转到参数列表的第一个文件
873 | :fix[del] 设置 的键码
874 | :fo[ld] 创建折叠
875 | :foldc[lose] 关闭折叠
876 | :foldd[oopen] 对所有不在关闭折叠的行执行命令
877 | :folddoc[losed] 对所有在关闭折叠的行执行命令
878 | :foldo[pen] 打开折叠
879 | :for for 循环
880 | :fu[nction] 定义用户函数
881 | :g[lobal] 对匹配的行执行命令
882 | :go[to] 转到缓冲区某字节处
883 | :gr[ep] 执行 'grepprg' 并转到第一个匹配处
884 | :grepa[dd] 类似 :grep,但附加到当前列表后
885 | :gu[i] 启动 GUI
886 | :gv[im] 启动 GUI
887 | :ha[rdcopy] 发送文本到打印机
888 | :h[elp] 打开帮助窗口
889 | :helpf[ind] 打开显示帮助窗口的对话框
890 | :helpg[rep] 类似于 ":grep",但搜索帮助文件
891 | :helpt[ags] 为一个目录产生帮助标签
892 | :hi[ghlight] 指定高亮方法
893 | :hid[e] 为一个命令隐藏当前缓冲区
894 | :his[tory] 显示历史列表
895 | :i[nsert] 插入文本
896 | :ia[bbrev] 类似于 ":abbrev",但用于插入模式
897 | :iabc[lear] 类似于 ":abclear",但用于插入模式
898 | :if 条件满足时执行命令
899 | :ij[ump] 跳转到标识符的定义
900 | :il[ist] 列出匹配标识符的行
901 | :im[ap] 类似于 ":map",但用于插入模式
902 | :imapc[lear] 类似于 ":map",但用于插入模式
903 | :ime[nu] 为插入模式增加菜单
904 | :ino[remap] 类似于 ":noremap",但用于插入模式
905 | :inorea[bbrev] 类似于 ":noreabbrev",但用于插入模式
906 | :inoreme[nu] 类似于 ":noremenu",但用于插入模式
907 | :int[ro] 显示介绍文字
908 | :is[earch] 列出匹配标识符的一行
909 | :isp[lit] 分割窗口,并跳转到标识符的定义
910 | :iu[nmap] 类似于 ":unmap",但用于插入模式
911 | :iuna[bbrev] 类似于 ":unabbrev",但用于插入模式
912 | :iunme[nu] 删除插入模式的菜单
913 | :j[oin] 连接行
914 | :ju[mps] 显示跳转表
915 | :k 设置位置标记
916 | :keepa[lt] 跟随的命令保持轮换文件不变
917 | :kee[pmarks] 跟随的命令保持位置标记不变
918 | :keepj[jumps] 跟随的命令保持跳转表和位置标记不变
919 | :lN[ext] 转到位置列表的上一个位置
920 | :lNf[ile] 转到上个文件的最近一个位置
921 | :l[ist] 显示行
922 | :lad[dexpr] 通过表达式补充位置
923 | :laddb[uffer] 通过缓冲区补充位置
924 | :laddf[ile] 把位置加到当前位置列表里
925 | :la[st] 转到参数列表的最后一个文件
926 | :lan[guage] 设置语言 (locale)
927 | :lat[er] 转到新的改变,重做
928 | :lb[uffer] 分析位置并跳转到第一个位置
929 | :lc[d] 改变本地的目录
930 | :lch[dir] 改变本地的目录
931 | :lcl[ose] 关闭位置窗口
932 | :lcs[cope] 类似于 ":cscope",但使用位置列表
933 | :le[ft] 左对齐行
934 | :lefta[bove] 使得分割的窗口出现在左侧或者上方
935 | :let 给变量或选项赋值
936 | :lex[pr] 从表达式里读取位置并跳转到第一个
937 | :lf[ile] 从文件里读取位置并跳转到第一个
938 | :lfir[st] 转到指定的位置上,缺省第一个
939 | :lgetb[uffer] 从缓冲区里读取位置
940 | :lgete[xpr] 从表达式里读取位置
941 | :lg[etfile] 从文件里读取位置
942 | :lgr[ep] 运行 'grepprg' 并跳转到第一个匹配
943 | :lgrepa[dd] 类似于 :grep,但附加到当前列表上
944 | :lh[elpgrep] 类似于 ":helpgrep",但使用位置列表
945 | :ll 转到指定位置
946 | :lla[st] 转到指定位置,缺省最后一个
947 | :lli[st] 列出所有的位置
948 | :lmak[e] 执行外部命令 'makeprg' 并分析错误信息
949 | :lm[ap] 类似于 ":map!",但包括 Lang-Arg 模式
950 | :lmapc[lear] 类似于 ":mapclear!",但包括 Lang-Arg 模式
951 | :lne[xt] 跳到下一个位置
952 | :lnew[er] 跳到较新的位置列表
953 | :lnf[ile] 跳到下一个文件的第一个位置
954 | :ln[oremap] 类似于 ":noremap!",但包括 Lang-Arg 模式
955 | :loadk[eymap] 载入后面的键盘映射表,直到 EOF 为止
956 | :lo[adview] 从文件里为当前窗口载入视图
957 | :loc[kmarks] 跟随的命令保持位置标记不变
958 | :lockv[ar] 给变量加锁
959 | :lol[der] 转到较旧的位置列表
960 | :lope[n] 打开位置窗口
961 | :lp[revious] 转到前一个位置
962 | :lpf[ile] 转到上一个文件的最近的位置
963 | :lr[ewind] 转到指定的位置,缺省第一个
964 | :ls 列出所有的缓冲区
965 | :lt[ag] 跳转到标签,并把匹配的标签加到位置列表上
966 | :lu[nmap] 类似于 ":unmap!",但包括 Lang-Arg 模式
967 | :lua 执行 |Lua| 命令
968 | :luad[o] 对每行都执行 Lua 命令
969 | :luaf[ile] 执行 |Lua| 脚本文件
970 | :lv[imgrep] 在若干文件里搜索模式
971 | :lvimgrepa[dd] 类似于 :vimgrep,但附加到当前列表
972 | :lw[indow] 打开或关闭位置窗口
973 | :m[ove] 移动行
974 | :ma[rk] 设置位置标记
975 | :mak[e] 执行外部命令 'makeprg' 并分析其错误信息
976 | :map 显示或者输入映射
977 | :mapc[lear] 清除所有普通和可视模式的映射
978 | :marks 列出所有的位置标记
979 | :mat[ch] 定义要高亮显示的匹配的模式
980 | :me[nu] 输入新的菜单项
981 | :menut[ranslate] 增加菜单翻译项目
982 | :mes[sages] 显示以前显示的消息
983 | :mk[exrc] 写入当前映射和设置到文件
984 | :mks[ession] 写入会话信息到文件
985 | :mksp[ell] 生成 .spl 拼写文件
986 | :mkv[imrc] 写入当前映射和设置到文件
987 | :mkvie[w] 写入当前窗口的视图到文件
988 | :mod[e] 显示或者改变屏幕模式
989 | :mz[scheme] 执行 MzScheme 命令
990 | :mzf[ile] 执行 MzScheme 脚本文件
991 | :nbc[lose] 关闭当前 Netbeans 会话
992 | :nb[key] 传递一个键给 Netbeans
993 | :nbs[art] 打开一个新的 Netbeans 会话
994 | :n[ext] 跳转到参数列表的下一个文件
995 | :new 创建一个新的空白窗口
996 | :nm[ap] 类似于 ":map",但使用普通模式
997 | :nmapc[lear] 清除普通模式的所有映射
998 | :nme[nu] 为普通模式增加菜单
999 | :nn[oremap] 类似于 ":noremap",但使用普通模式
1000 | :nnoreme[nu] 类似于 ":noremenu",但使用普通模式
1001 | :noa[utocmd] 跟随的命令不激活自动命令
1002 | :no[remap] 输入不会被重新映射的映射
1003 | :noh[lsearch] 暂停 'hlsearch' 高亮
1004 | :norea[bbrev] 输入不会被重新映射的缩写
1005 | :noreme[nu] 输入不会被重新映射的菜单
1006 | :norm[al] 执行普通模式的命令
1007 | :nu[mber] 显示文本行时给出行号
1008 | :nun[map] 类似于 ":unmap",但使用普通模式
1009 | :nunme[nu] 删除普通模式的菜单
1010 | :ol[dfiles] 列出 viminfo 文件中包含位置标记的文件
1011 | :o[pen] 启动打开模式 (没有实现)
1012 | :om[ap] 类似于 ":map",但使用操作符等待模式
1013 | :omapc[lear] 删除操作符等待模式的所有映射
1014 | :ome[nu] 为操作符等待模式增加菜单
1015 | :on[ly] 关闭当前窗口,除了当前的窗口以外
1016 | :ono[remap] 类似于 ":noremap",但使用操作符等待模式
1017 | :onoreme[nu] 类似于 ":noremenu",但使用操作符等待模式
1018 | :opt[ions] 打开选项窗口
1019 | :ou[nmap] 类似于 ":unmap",但使用操作符等待模式
1020 | :ounme[nu] 删除操作符等待模式的菜单
1021 | :ow[nsyntax] 为本窗口设置新的局部语法高亮
1022 | :p[rint] 显示行
1023 | :profd[el] 停止剖视 (profile) 函数或脚本
1024 | :prof[ile] 剖视 (profile) 函数或脚本
1025 | :pro[mptfind] 打开 GUI 对话框进行搜索
1026 | :promptr[epl] 打开 GUI 对话框进行搜索/替代
1027 | :pc[lose] 关闭预览窗口
1028 | :ped[it] 在预览窗口编辑文件
1029 | :pe[rl] 执行 Perl 命令
1030 | :perld[o] 对每行都执行 Perl 命令
1031 | :po[p] 跳转到标签栈较旧的项目上
1032 | :pop[up] 根据名字弹出菜单
1033 | :pp[op] 在预览窗口 ":pop"
1034 | :pre[serve] 写入所有文本到交换文件
1035 | :prev[ious] 跳转到参数列表里的上一个文件
1036 | :ps[earch] 类似于 ":ijump",但在预览窗口显示匹配
1037 | :pt[ag] 在预览窗口显示标签
1038 | :ptN[ext] 在预览窗口 |:tNext|
1039 | :ptf[irst] 在预览窗口 |:trewind|
1040 | :ptj[ump] 在预览窗口 |:tjump| 和显示标签
1041 | :ptl[ast] 在预览窗口 |:tlast|
1042 | :ptn[ext] 在预览窗口 |:tnext|
1043 | :ptp[revious] 在预览窗口 |:tprevious|
1044 | :ptr[ewind] 在预览窗口 |:trewind|
1045 | :pts[elect] 在预览窗口 |:tselect| 和显示标签
1046 | :pu[t] 插入寄存器的内容到文本
1047 | :pw[d] 显示当前目录
1048 | :py3 执行 Python 3 命令
1049 | :python3 同 :py3
1050 | :py3f[ile] 执行 Python 3 脚本文件
1051 | :py[thon] 执行 Python 命令
1052 | :pyf[ile] 执行 Python 脚本文件
1053 | :q[uit] 退出当前窗口 (如果只有一窗口,则退出 Vim)
1054 | :quita[ll] 退出 Vim
1055 | :qa[ll] 退出 Vim
1056 | :r[ead] 读入文件到文本
1057 | :rec[over] 从交换文件里恢复文件
1058 | :red[o] 重做一次撤销的改变
1059 | :redi[r] 重定向消息到文件或者寄存器
1060 | :redr[aw] 强迫显示的重画
1061 | :redraws[tatus] 强迫状态行的重画
1062 | :reg[isters] 显示寄存器的内容
1063 | :res[ize] 改变当前窗口的高度
1064 | :ret[ab] 改变制表大小
1065 | :retu[rn] 从用户函数返回
1066 | :rew[ind] 转到参数列表的第一个文件
1067 | :ri[ght] 右对齐文本
1068 | :rightb[elow] 使得分割窗口出现在右侧或者下方
1069 | :rub[y] 执行 Ruby 命令
1070 | :rubyd[o] 对每行执行 Ruby 命令
1071 | :rubyf[ile] 执行 Ruby 脚本文件
1072 | :rund[o] 从文件里读入撤销信息
1073 | :ru[ntime] 执行 'runtimepath' 里的 vim 脚本
1074 | :rv[iminfo] 读取 viminfo 文件
1075 | :s[ubstitute] 查找和替代文本
1076 | :sN[ext] 分割窗口并转到参数列表的前一个文件
1077 | :san[dbox] 在沙盘里执行命令
1078 | :sa[rgument] 分割窗口并转到参数列表的某一个文件
1079 | :sal[l] 为参数列表的每个文件打开窗口
1080 | :sav[eas] 用别的名字保存文件。
1081 | :sb[uffer] 分割窗口并转到缓冲区列表的某一个文件
1082 | :sbN[ext] 分割窗口并转到缓冲区列表的前一个文件
1083 | :sba[ll] 为缓冲区列表的每个文件打开窗口
1084 | :sbf[irst] 分割窗口并转到缓冲区列表的第一个文件
1085 | :sbl[ast] 分割窗口并转到缓冲区列表的最后一个文件
1086 | :sbm[odified] 分割窗口并转到缓冲区列表的修改过的文件
1087 | :sbn[ext] 分割窗口并转到缓冲区列表的后一个文件
1088 | :sbp[revious] 分割窗口并转到缓冲区列表的前一个文件
1089 | :sbr[ewind] 分割窗口并转到缓冲区列表的第一个文件
1090 | :scrip[tnames] 列出所有执行过的 Vim 脚本的名字
1091 | :scripte[ncoding] 执行过的 Vim 脚本使用的编码
1092 | :scs[cope] 分割窗口并执行 cscope 命令
1093 | :se[t] 显示或设置选项
1094 | :setf[iletype] 设置 'filetype',除非已经设置过
1095 | :setg[lobal] 显示或者设置全局选项值
1096 | :setl[ocal] 显示或者设置本地选项值
1097 | :sf[ind] 分割当前窗口并编辑 'path' 的文件
1098 | :sfir[st] 分割窗口并转到参数列表的第一个文件
1099 | :sh[ell] 退到外壳程序
1100 | :sim[alt] Win32 GUI: 模拟 Windows ALT 键
1101 | :sig[n] 操作标号
1102 | :sil[ent] 安静地运行命令
1103 | :sl[eep] 几秒内不作任何事
1104 | :sla[st] 分割窗口并转到参数列表的最后一个文件
1105 | :sm[agic] 带 'magic' 的 :substitute
1106 | :sma[p] 类似于 ":map",但用于选择模式
1107 | :smapc[lear] 删除选择模式所有的映射
1108 | :sme[nu] 增加选择模式菜单
1109 | :sn[ext] 分割窗口并转到参数列表的下一个文件
1110 | :sni[ff] 发送请求到 sniff
1111 | :sno[magic] 带 'nomagic' 的 :substitute
1112 | :snor[emap] 类似于 ":noremap",但用于选择模式
1113 | :snoreme[nu] 类似于 ":noremenu",但用于选择模式
1114 | :sor[t] 给行排序
1115 | :so[urce] 从文件里读取 Vim 或 Ex 命令
1116 | :spelld[ump] 分割窗口并用正确的单词填充
1117 | :spe[llgood] 增加拼写的好词
1118 | :spelli[nfo] 显示载入的拼写文件的信息
1119 | :spellr[epall] 像上次 |z=| 那样,但替换所有的坏词
1120 | :spellu[ndo] 删除好词或坏词
1121 | :spellw[rong] 增加拼写错误
1122 | :sp[lit] 分割当前窗口
1123 | :spr[evious] 分割窗口并转到参数列表的前一个文件
1124 | :sre[wind] 分割窗口并转到参数列表的第一个文件
1125 | :st[op] 暂停编辑器并退回外壳
1126 | :sta[g] 分割窗口并跳转到标签上
1127 | :startg[replace] 开始虚拟替换模式
1128 | :startr[eplace] 开始替换模式
1129 | :star[tinsert] 开始插入模式
1130 | :stopi[nsert] 退出插入模式
1131 | :stj[ump] 执行 ":tjump" 并分割窗口
1132 | :sts[elect] 执行 ":tselect" 并分割窗口
1133 | :sun[hide] 等同于 ":unhide"
1134 | :sunm[ap] 类似于 ":unmap",但用于选择模式
1135 | :sunme[nu] 删除选择模式的菜单
1136 | :sus[pend] 等同于 ":stop"
1137 | :sv[iew] 分割窗口并以只读模式编辑文件
1138 | :sw[apname] 显示当前交换文件的名字
1139 | :sy[ntax] 语法高亮
1140 | :sync[bind] 同步滚动绑定
1141 | :t 等同于 ":copy"
1142 | :tN[ext] 跳转到上一个匹配的标签
1143 | :tabN[ext] 跳到上一个标签页
1144 | :tabc[lose] 关闭当前标签页
1145 | :tabdo 为每个标签页执行命令
1146 | :tabe[dit] 在新标签页里编辑文件
1147 | :tabf[ind] 寻找 'path' 里的文件,在新标签页里编辑之
1148 | :tabfir[st] 转到第一个标签页
1149 | :tabl[ast] 转到最后一个标签页
1150 | :tabm[ove] 把标签页移到别的位置
1151 | :tabnew 在新标签页里编辑文件
1152 | :tabn[ext] 转到下一个标签页
1153 | :tabo[nly] 关闭所有除了当前标签页以外的所有标签页
1154 | :tabp[revious] 转到前一个标签页
1155 | :tabr[ewind] 转到第一个标签页
1156 | :tabs 列出标签页以及里面包含的内容
1157 | :tab 打开新窗口时建立新的标签页
1158 | :ta[g] 跳转到标签上
1159 | :tags 显示标签栈的内容
1160 | :tc[l] 执行 Tcl 命令
1161 | :tcld[o] 为每行执行 Tcl 命令
1162 | :tclf[ile] 执行 Tcl 脚本文件
1163 | :te[aroff] 撕下一个菜单
1164 | :tf[irst] 转到第一个匹配的标签
1165 | :th[row] 抛出例外
1166 | :tj[ump] 类似于 ":tselect",只有一个匹配时直接跳转之
1167 | :tl[ast] 跳转到最后一个匹配的标签
1168 | :tm[enu] 定义菜单的工具提示
1169 | :tn[ext] 跳转到下一个匹配的标签
1170 | :to[pleft] 使得分割的窗口出现在顶部或者最左端
1171 | :tp[revious] 跳转到上一个匹配的标签
1172 | :tr[ewind] 跳转到第一个匹配的标签
1173 | :try 执行命令,错误或者例外时终止
1174 | :ts[elect] 列出匹配的标签并从中选择一个
1175 | :tu[nmenu] 删除菜单的工具提示
1176 | :u[ndo] 撤销最近的改变
1177 | :undoj[oin] 将下一个改变和上一个撤销块合并
1178 | :undol[ist] 列出撤销树的叶结点
1179 | :una[bbreviate] 删除缩写
1180 | :unh[ide] 为缓冲区列表里每个载入的文件打开窗口
1181 | :unl[et] 删除变量
1182 | :unlo[ckvar] 给变量解锁
1183 | :unm[ap] 删除映射
1184 | :unme[nu] 删除菜单
1185 | :uns[ilent] 非安静模式执行命令
1186 | :up[date] 如果有修改,写回缓冲区
1187 | :v[global] 对不匹配的行,执行命令
1188 | :ve[rsion] 显示版本号和其它信息
1189 | :verb[ose] 执行命令,过程中设置 'verbose'
1190 | :vert[ical] 使得跟随的命令垂直分割
1191 | :vim[grep] 在若干文件里查找模式
1192 | :vimgrepa[dd] 类似于 :vimgrep,但附加到当前列表
1193 | :vi[sual] 等同于 ":edit",但关掉 "Ex" 模式
1194 | :viu[sage] 普通模式命令的总览
1195 | :vie[w] 以只读方式编辑文件
1196 | :vm[ap] 类似于 ":map",但使用可视+选择模式
1197 | :vmapc[lear] 删除可视+选择模式所有的映射
1198 | :vme[nu] 为可视+选择模式增加菜单
1199 | :vne[w] 建立新的空白窗口,垂直分割
1200 | :vn[oremap] 类似于 ":noremap",但使用可视+选择模式
1201 | :vnoreme[nu] 类似于 ":noremenu",但使用可视+选择模式
1202 | :vs[plit] 垂直分割当前窗口
1203 | :vu[nmap] 类似于 ":unmap",但使用可视+选择模式
1204 | :vunme[nu] 删除可视+选择模式的菜单
1205 | :windo 为每个窗口执行命令
1206 | :w[rite] 写回文件
1207 | :wN[ext] 写回文件,然后跳转到参数列表的前一个文件
1208 | :wa[ll] 写回所有 (改变的) 缓冲区
1209 | :wh[ile] 只要条件满足,执行循环体
1210 | :wi[nsize] 取得或者设置窗口大小 (已废弃)
1211 | :winc[md] 执行窗口 (CTRL-W) 命令
1212 | :winp[os] 取得或者设置窗口位置
1213 | :wn[ext] 写回文件,然后跳转到参数列表的下一个文件
1214 | :wp[revious] 写回文件,然后跳转到参数列表的前一个文件
1215 | :wq 写回文件,然后退出窗口或者 Vim
1216 | :wqa[ll] 写回所有 (改变的) 缓冲区然后退出 Vim
1217 | :ws[verb] 把动词通过 IPC 发送给 workshop
1218 | :wu[ndo] 把撤销信息写入文件
1219 | :wv[iminfo] 写入 viminfo 文件
1220 | :x[it] 如果缓冲区被改动,写入之。然后退出窗口或者 Vim
1221 | :xa[ll] 等同于 ":wqall"
1222 | :xmapc[lear] 删除可视模式的所有映射
1223 | :xm[ap] 类似于 ":map",但使用可视模式
1224 | :xme[nu] 增加可视模式的菜单
1225 | :xn[oremap] 类似于 ":noremap",但使用可视模式
1226 | :xnoreme[nu] 类似于 ":noremenu",但使用可视模式
1227 | :xu[nmap] 类似于 ":unmap",但使用可视模式
1228 | :xunme[nu] 删除可视模式的菜单
1229 | :y[ank] 抽出行到寄存器
1230 | :z 显示一些行
1231 | EOF
1232 |
1233 | @lines.each do |line|
1234 | if /^###/ =~ line
1235 | label = line.sub /###/, ""
1236 | @mode = Mode.where(label: label).first_or_create!
1237 | elsif m = /^(?([\x21-\x7e]+ ?)+)(?.+)/.match(line)
1238 | command = m["command"].strip
1239 | desc = m["desc"].strip
1240 | desc = desc.sub(/^\d +/, "")
1241 | if desc.strip.empty? || /^不用/ =~ desc
1242 | next
1243 | end
1244 | puts "Mode: #{@mode.label} Create Command:#{command} - #{desc}"
1245 | @mode.vim_commands.create! command: command, description: desc, language: 'cn'
1246 | end
1247 | end
1248 | end
1249 | end
1250 |
--------------------------------------------------------------------------------
/lib/tasks/insert_new_jp.rake:
--------------------------------------------------------------------------------
1 | # encoding: UTF-8
2 | namespace :seed do
3 | desc "Insert New Japanese Descriptions"
4 | task :insert_new_jp => :environment do
5 | @lines = <<-EOF.split "\n"
6 | ###左右の移動
7 | N h 左に N 桁移動 ( CTRL-H, , キーでも同じ)
8 | N l 右に N 桁移動 ( , キーでも同じ)
9 | 0 行の先頭に移動 ( キーでも同じ)
10 | ^ 行の先頭(但し空白文字類以外)に移動
11 | N $ 行の末尾に移動。(N-1行、下に移動)( キーでも同じ)
12 | g0 画面上の行の先頭に移動。(複数行にまたがる時の動きが"0"と違います)
13 | g^ 画面上の行の先頭(但し空白文字類以外)に移動。(複数行にまたがる時の動きが"^"と違います)
14 | N g$ 行の末尾に移動。(複数行にまたがる時の動きが"$"と違います)
15 | gm 現在行の中央(端末の横幅の半分の桁位置)に移動
16 | N | N桁目に移動。(デフォルトは1)
17 | N f{char} 現在位置から右方向にあるN個目の{char}に移動
18 | N F{char} 現在位置から左方向にあるN個目の{char}に移動
19 | N t{char} 現在位置から右方向にあるN個目の{char}の左側に移動
20 | N T{char} 現在位置から左方向にあるN個目の{char}の右側に移動
21 | N ; 直前の"f", "F", "t", "T"を N 回繰り返す。
22 | N , 直前の"f", "F", "t", "T"を逆方向に N 回繰り返す。
23 | ###上下の移動
24 | N k 上に N 行移動 (CTRL-P, キーでも同じ)
25 | N j 下に N 行移動 (CTRL-J, CTRL-N, , でも同じ)
26 | N - 上に N 行移動し、行頭の非空白文字に移動
27 | N + 下に N 行移動し、行頭の非空白文字に移動(CTRL-M, キーでも同じ)
28 | N _ 下に N-1 行移動し,行頭の非空白文字に移動
29 | N G N 行目(デフォルトは最後の行)に移動し、行頭の非空白文字に移動
30 | N gg N 行目(デフォルトは1行目)に移動し、行頭の非空白文字に移動
31 | N % ファイルの N パーセント目に移動。このコマンドは N の指定が必須。無指定の場合は|%|コマンド扱い。
32 | N gk 画面上で N 行上に移動。(複数行にまたがる行がある場合の動きが"k"と異なる)
33 | N gj 画面上で N 行下に移動。(複数行にまたがる行がある場合
34 | ###テキスト文脈単位の移動
35 |
36 | N w N 個目の単語分、先に進む
37 | N W 空白で区切られた単語(=|WORD|) N 個分、先に進む
38 | N e N 個目の単語のお尻まで進む
39 | N E 空白で区切られた単語(=|WORD|) N 個目のお尻まで進む
40 | N b N 個目の単語分、前に戻る
41 | N B 空白で区切られた単語(=|WORD|) N 個分、前に戻る
42 | N ge N 個目の単語のお尻まで戻る
43 | N gE 空白で区切られた単語(=|WORD|) N 個目のお尻まで戻る
44 |
45 | N ) N センテンス(文)分、先に進む
46 | N ( N センテンス分、前に戻る
47 | N } N パラグラフ(段落)分、先に進む
48 | N { N パラグラフ分、前に戻る
49 | N ]] N セクション(章)分、先に進み、その先頭に移動
50 | N [[ N セクション(章)分、前に戻り、その先頭に移動
51 | N ][ N セクション(章)分、先に進み、その末尾に移動
52 | N [] N セクション(章)分、前に戻り、その末尾に移動
53 | N [( N 個目の呼応していない'('まで戻る
54 | N [{ N 個目の呼応していない'{'まで戻る
55 | N [m N 個前のメソッドの先頭まで戻る(Java用)
56 | N [M N 個前のメソッドの末尾まで戻る(Java用)
57 | N ]) N 個目の呼応していない')'まで進む
58 | N ]} N 個目の呼応していない'}'まで進む
59 | N ]m N 個先のメソッドの先頭まで進む(Java用)
60 | N ]M N 個先のメソッドの末尾まで進む(Java用)
61 | N [# N 個目の呼応していない"#if"や"#else"まで戻る
62 | N ]# N 個目の呼応していない"#else"や"#endif"まで進む
63 | N [* N 個前のコメントの先頭まで戻る
64 | N ]* N 個先のコメントの末尾まで進む
65 |
66 | ###パターン検索
67 |
68 | N /{pattern}[/[offset]] N 回目の{pattern}を含む個所を下方向に検索
69 | N ?{pattern}[?[offset]] N 回目の{pattern}を含む個所を上方向に検索
70 | N / 直前と同じ条件の検索を下方向に対して実施
71 | N ? 直前と同じ条件の検索を上方向に対して実施
72 | N n 直前の検索を再実行
73 | N N 直前の検索を逆方向に再実行
74 | N * カーソル位置にある単語を下方向に検索
75 | N # カーソル位置にある単語を上方向に検索
76 | N g* "*"と同じだが、部分的な一致を検索
77 | N g# "#"と同じだが、部分的な一致を検索
78 | gd カーソル位置の識別子のローカル宣言に移動
79 | gD カーソル位置の識別子のグローバル宣言に移動
80 |
81 |
82 |
83 | ###マーク
84 |
85 | m{a-zA-Z} 現在の場所を {a-zA-Z} としてマーク
86 | `{a-z} 編集中のファイルのマーク{a-z} に移動
87 | `{A-Z} 任意のファイルのマーク{A-Z} に移動
88 | `{0-9} vimが前回終了した時の場所に移動
89 | `` 直前のジャンプコマンドの前の場所に移動
90 | `" 前回このファイルを編集した時の場所に移動
91 | `[ 直前に繰作もしくはプットした文字列の先頭に移動
92 | `] 直前に繰作もしくはプットした文字列の末尾に移動
93 | `< (直前の)ビジュアルエリアの先頭に移動
94 | `> (直前の)ビジュアルエリアの末尾に移動
95 | `. このファイルで最後に変更した場所に移動
96 | '{a-zA-Z0-9[]'"<>.} ` と同じだが、その行の先頭の非空白文字まで移動する点が異なる。
97 | :marks 現在設定されているマークを一覧表示
98 | N CTRL-O ジャンプリストの N 番目に古い場所に移動
99 | N CTRL-I ジャンプリストの N 番目に新しい場所に移動
100 | :ju[mps] ジャンプリストを一覧表示
101 |
102 | ###雑他な移動コマンド
103 |
104 | % 呼応するカッコ類("(","[","{")や、コメント、"#if"/"#else"/"#endif"のペアを検索して移動
105 | N H 画面上で N 行目の最初の非空白文字に移動
106 | M 画面上の真ん中の行の最初の非空白文字に移動
107 | N L 画面上で下から N 行目の最初の非空白文字に移動
108 |
109 | N go 現バッファの N バイト目に移動
110 | :[range]go[to] [off] 現バッファの [off] バイト目に移動
111 |
112 | ###タグの利用
113 |
114 | :ta[g][!] {tag} {tag}で指定したタグにジャンプ
115 | :[count]ta[g][!] タグリストの[count]番目に新しいタグにジャンプ
116 | CTRL-] 変更がされていない限り、カーソル位置にあるタグにジャンプ
117 | :ts[elect][!] [tag] タグに合致する一覧を表示し、ジャンプ先を選択
118 | :tj[ump][!] [tag] 指定のタグ [tag] にジャンプ。もし、合致するタグが複数ある時は一覧から選択
119 | :lt[ag][!] [tag] タグ [tag] にジャンプし、マッチしたタグをロケーションリストに加える。
120 | :tags タグリストを一覧表示
121 | N CTRL-T タグリストの N 番目に古いタグにジャンプ
122 | :[count]po[p][!] タグリストの [count] 番目に古いタグにジャンプ
123 | :[count]tn[ext][!] [count] 個分、次のタグにジャンプ
124 | :[count]tp[revious][!] [count]個分、前のタグにジャンプ
125 | :[count]tr[ewind][!] [count]番目に一致するタグにジャンプ
126 | :tl[ast][!] 直前に一致したタグにジャンプ
127 |
128 | :pt[ag] {tag} {tag}タグを見るためのプレビュー画面を開く
129 | CTRL-W } CTRL-] と同様だがプレビュー画面にジャンプ
130 | :pts[elect] ":tselect"と同様だがプレビュー画面にジャンプ
131 | :ptj[ump] ":tjump"と同様だがプレビュー画面にジャンプ
132 | :pc[lose] タグプレビュー画面を閉じる。
133 | CTRL-W z タグプレビュー画面を閉じる。
134 |
135 | ###スクロール
136 |
137 | N CTRL-E 画面を N 行下方向スクロール(デフォルトは1)
138 | N CTRL-D 画面を N 行下方向スクロール(デフォルトは画面の半分)
139 | N CTRL-F 画面を N ページ分下方向スクロール
140 | N CTRL-Y 画面を N 行分上方向スクロール(デフォルトは1)
141 | N CTRL-U 画面を N 行分上方向スクロール(デフォルトは画面の半分)
142 | N CTRL-B 画面を N ページ分上方向スクロール
143 | z or zt 現在行を画面の1行目にして、再描画
144 | z. or zz 現在行を画面の中央にして、再描画
145 | z- or zb 現在行を画面の最下行にして、再描画
146 |
147 | ###'wrap'がoffになっている時のみ有効
148 | N zh 画面を N 文字、右へスクロール
149 | N zl 画面を N 文字、左へスクロール
150 | N zH 画面桁数の半分だけ、右へスクロール
151 | N zL 画面桁数の半分だけ、左へスクロール
152 |
153 | ###文字列の挿入
154 |
155 | N a カーソル位置の後に文字列を(N回)追加
156 | N A 現在行の末尾に文字列を(N回)追加
157 | N i カーソル位置の前に文字列を(N回)追加(も同様)
158 | N I 現在行の最初の非空白文字の前に文字列を(N回)追加
159 | N gI 現在行の先頭に文字列を(N回)追加
160 | N o 現在行の下に新たな行を追加し、文字列を(N回)追加する。
161 | N O 現在行に新たな行を挿入し、文字列を(N回)追加する。
162 | :star[tinsert][!] Insertモードを開始する。[!]を指定するとAppendモードとなる。
163 | :startr[eplace][!] Replaceモードを開始する。[!]を指定すると行末から開始する。
164 |
165 | ###ビジュアルモード
166 | I 選択している全行の前に、同じ文字列を挿入する。
167 | A 選択している全行の後ろに、同じ文字列を挿入する。
168 |
169 | ###挿入モードの終了
170 | 挿入モードを終わって、通常モードへ復帰
171 | CTRL-C と同様。ただし、短縮形は展開しない
172 | CTRL-O {command} {command}を実行し、挿入モードへ復帰
173 |
174 | ###移動
175 | cursor keys カーソルを上下左右に移動
176 | shift-left/right 1単語ごと左右に移動
177 | shift-up/down 1画面ごと前後に移動
178 | その行の最終桁に移動
179 | その行の先頭桁に移動
180 |
181 | ###挿入モードでの特殊キー
182 |
183 | CTRL-V {char}.. 指定の{char}、もしくは10進数指定のバイト値を挿入
184 | or or CTRL-M or CTRL-J 改行して、新しい行を作成
185 | CTRL-E カーソル位置の直下の行の内容を1文字挿入
186 | CTRL-Y カーソル位置の真上の行の内容を1文字挿入
187 |
188 | CTRL-A 直前に挿入した文字列をもう一度挿入
189 | CTRL-@ 直前に挿入した文字列をもう一度挿入し、挿入モードから復帰
190 | CTRL-R {0-9a-z%#:.-="} 指定のレジスタの内容を挿入
191 |
192 | CTRL-N カーソルの前にあるキーワードと合致する単語を順方向に検索して挿入
193 | CTRL-P カーソルの前にあるキーワードと合致する単語を逆方向に検索して挿入
194 | CTRL-X ... カーソルの前にある単語をいろんな方法で補完する。
195 |
196 | or CTRL-H カーソルの前の1文字を削除
197 | カーソル位置の1文字を削除
198 | CTRL-W カーソル位置の1単語を削除
199 | CTRL-U 現在行で入力した全部の文字を削除
200 | CTRL-T 'shiftwidth'での指定分のインデントを現在行の行頭に挿入
201 | CTRL-D 'shiftwidth'での指定分のインデントを現在行の行頭から削除
202 | 0 CTRL-D 現在行の全インデントを削除
203 | ^ CTRL-D 現在行の全インデントを削除。但し、次の行のインデントには影響しない。
204 |
205 | ###特殊な挿入コマンド
206 |
207 | :r [file] カーソル位置の後ろに [file] の内容を挿入
208 | :r! {command} カーソル位置の後ろに {command} を実行した結果の標準出力の内容を挿入
209 |
210 | ###文字列の削除
211 |
212 | N x カーソル位置及びその後ろの N 文字を削除
213 | N カーソル位置及びその後ろの N 文字を削除
214 | N X カーソル位置の前の N 文字を削除
215 | N d{motion} {motion}で指定された範囲の文字列を削除
216 | {visual}d ハイライト化された文字列を削除
217 | N dd N 行削除
218 | N D (N-1 行後の)行末まで削除
219 | N J N-1 行を結合して1行に(を削除)
220 | {visual}J ビジュアルモードで選択された文字列を結合
221 | N gJ "J"と同じだが、行の間にスペースを入れない
222 | {visual}gJ "{visual}J"と同じだが、行の間にスペースを入れない
223 | :[range]d [x] [range]で指定した範囲の行を削除 [それをレジスタxに]
224 |
225 | ###文字列のコピーと移動
226 |
227 | "{char} レジスタ{char}を指定。これに続いて、削除コマンドやヤンクコマンド、プットコマンドを指定
228 | :reg 全レジスタの内容を表示
229 | :reg {arg} {arg}で示されたレジスタの内容を表示
230 | N y{motion} {motion}で指定された範囲の文字列をレジスタにヤンク(コピー)
231 | {visual}y ハイライト化された文字列をレジスタにヤンク
232 | N yy N 行をレジスタにヤンク
233 | N Y N 行をレジスタにヤンク
234 | N p カーソル位置の後にレジスタ内容をN回プット(ペースト)
235 | N P カーソル位置の前にレジスタ内容をN回プット(ペースト)
236 | N ]p pと同じだが、インデントを現在行に合せる
237 | N [p Pと同じだが、インデントを現在行に合せる
238 | N gp pと同じだが、挿入した文字列の後にカーソルを移動
239 | N gP Pと同じだが、挿入した文字列の後にカーソルを移動
240 |
241 | ###「変更」とは、文字列を削除し、挿入モードに入ること
242 | N c{motion} {motion}で指定した範囲の文字列を変更
243 | {visual}c ビジュアルモードで選択された文字列を変更
244 | N cc N 行を変更
245 | N S N 行を変更
246 | N C (N-1 行後の)行末までを変更
247 | N s N 文字を変更
248 | ###文字列の変更
249 |
250 | N r{char} N 文字を{char}に置換
251 | N gr{char} N 文字をレイアウトに影響を与えずに置換
252 | N R 置換モードへ (入力文字列を N 回繰り返す)
253 | N gR 仮想置換モードへ。置換モードと同じだが、レイアウトに影響しない。
254 | {visual}r{char} ビジュアルブロックモード用: 選択範囲の各文字を{char}で、置換
255 |
256 | {visual}c ビジュアルブロックモード用:選ばれている各行の内容を入力した文字列に置き換え
257 | {visual}C ビジュアルブロックモード用:選ばれている各行の行末までを入力した文字列に置き換え
258 |
259 | N ~ N 文字分の英文字の大文字/小文字を変換し、カーソルを移動
260 | {visual}~ ビジュアルモードで選択された範囲の大文字/小文字を変換
261 | {visual}u ビジュアルモードで選択された範囲を小文字に変換
262 | {visual}U ビジュアルモードで選択された範囲を大文字に変換
263 | g~{motion} {motion}で指定した範囲の大文字/小文字を変換
264 | gu{motion} {motion}で指定した範囲を小文字に変換
265 | gU{motion} {motion}で指定した範囲を大文字に変換
266 | {visual}g? ビジュアルモードで選択した範囲をrot13でエンコードする。
267 | g?{motion} {motion}で指定した範囲をrot13でエンコードする。
268 |
269 | N CTRL-A カーソル位置もしくは後ろにある数字にNを加算する
270 | N CTRL-X カーソル位置もしくは後ろにある数字からNを減算する
271 |
272 | N <{motion} {motion}で指定した範囲を'shiftwidth'分、インデントを減らす
273 | N << カレント行から N 行分のインデントを減らす
274 | N >{motion} {motion}で指定した範囲を'shiftwidth'分、インデントを増やす
275 | N >> カレント行から N 行分のインデントを増やす
276 | N gq{motion} {motion}で指定した範囲を'textwidth'で指定した長さにフォーマット
277 | :[range]ce[nter] [width][range]の行範囲をセンタリング
278 | :[range]le[ft] [indent][range]の行範囲を([indent] 分)左寄せ
279 | :[range]ri[ght] [width][range]の行範囲を([width] 桁まで)右寄せ
280 |
281 | ###複雑な変更処理
282 |
283 | N !{motion}{command} {motion}で指定した範囲を{command}の結果出力に置き換え
284 | N !!{command} N 行を{command}の結果出力に置き換え
285 | {visual}!{command} ビジュアルモードで選択された範囲を{command}の結果出力に置き換え
286 | :[range]! {command} [range] の範囲を{command}の結果出力に置き換え
287 | N ={motion} {motion}で指定した範囲を'equalprg'の結果出力に置き換え
288 | N == N 行を'equalprg'の結果出力に置き換え
289 | {visual}= ビジュアルモードで選択された範囲を'equalprg'の結果出力に置き換え
290 | :[range]s[ubstitute]/{pattern}/{string}/[g][c] [range]の範囲の{pattern}を{string}に置換する。[g]を指定すると、見つかった全{pattern}を置換。[c]を指定すると、各置換を確認する。
291 | :[range]s[ubstitute] [g][c] 直前の":s"を新たな範囲とオプションで繰り返す
292 | & 直前の":s"を現在行について繰り返す。(オプションなし)
293 | :[range]ret[ab][!] [tabstop] 'tabstop'の値を変更し、それに従って空白、TABの類を適切な状態にする。
294 |
295 | ###ビジュアルモード
296 |
297 |
298 | v 文字単位のビジュアルモードを開始 } カーソルを動かして
299 | V 行単位のビジュアルモードを開始 } 選択した範囲に対し
300 | CTRL-V 矩形単位のビジュアルモードを開始 } コマンドを実行
301 | o カーソル位置と選択範囲の開始位置を入れ替え
302 | gv 直前の選択範囲を選んだ状態でビジュアルモードを開始
303 |
304 | ###文字列オブジェクト(ビジュアルモードか、オペレータ指定後)
305 |
306 | N aw "a word"を選択(単語の前後の空白も削除)
307 | N iw "inner word"を選択(正味の単語だけを削除)
308 | N aW "a |WORD|"を選択
309 | N iW "inner |WORD|"を選択
310 | N as "a sentence"を選択
311 | N is "inner sentence"を選択
312 | N ap "a paragraph"を選択
313 | N ip "inner paragraph"を選択
314 | N ab "a block"( "[("~"])"の範囲)を選択
315 | N ib "inner block" ( "[("~"])"の範囲)を選択
316 | N aB "a Block" ( "[{"~"]}"の範囲)を選択
317 | N iB "inner Block" ( "[{"~"]}"の範囲)を選択
318 | N a> "a <> block"を選択
319 | N i> "inner <> block"を選択
320 | N at "a tag block" ( ~ )を選択
321 | N it "inner tag block" ( ~ )を選択
322 | N a' "a single quoted string"を選択
323 | N i' "inner single quoted string"を選択
324 | N a" "a double quoted string"を選択
325 | N i" "inner double quoted string"を選択
326 | N a` "a backward quoted string"を選択
327 | N i` "inner backward quoted string"を選択
328 |
329 |
330 | ###繰り返しコマンド
331 |
332 | N . 直前のコマンドを繰り返す。(回数はN回となる)
333 | q{a-z} 入力された文字群をレジスタ{a-z}に記録
334 | q{A-Z} 入力された文字群をレジスタ{a-z}に追加して記録
335 | q 記録を終了
336 | N @{a-z} レジスタ{a-z}の内容を N 回実行
337 | N @@ 直前の@{a-z} を N 回実行
338 | :@{a-z} レジスタ{a-z}の内容をExコマンドとみなして、N回実行
339 | :@@ 直前の:@{a-z} を N 回実行
340 | :[range]g[lobal]/{pattern}/[cmd] [range]の中で、指定の{pattern}に合致する各行に対して[cmd]コマンド(デフォルトでは":p")を実行する。
341 | :[range]g[lobal]!/{pattern}/[cmd] [range]の中で、指定の{pattern}に合致**しない**各行に対して[cmd]コマンド(デフォルトでは":p")を実行する。
342 | :so[urce] {file} {file}からExコマンドを読み出す。
343 | :so[urce]! {file} {file}からvimコマンドを読み出す。
344 | :sl[eep] [sec] [sec] 秒間の間、何もしない
345 | N gs N 秒間の間、何もしない
346 |
347 | ###Undo/Redo コマンド
348 |
349 | N u 最後の N 回分の作業をアンドゥ
350 | N CTRL-R 最後の N 回分のアンドゥを取り消す(redo)
351 | U 行全体への変更を取り消す
352 |
353 | ###外部コマンド
354 |
355 | :sh[ell] シェルを起動する
356 | :!{command} {command}をシェルで起動する
357 | K カーソル下にある単語を'keywordprg' 外部コマンドで調べる。(デフォルトは"man")
358 |
359 | ###さまざまなコマンド
360 |
361 | CTRL-L 画面の再描画
362 | CTRL-G 現在の(パス名+)ファイル名とカーソル位置を表示
363 | ga カーソル位置のASCII文字コードを10進、16進、8進で表示
364 | g8 utf-8エンコーディング用:カーソル下の文字のバイト列を16進で表示する。
365 | g CTRL-G カーソル桁数、行数、単語数、文字数を表示
366 | CTRL-C 検索中:検索を中止
367 | CTRL-Break MS-DOS: 検索中:検索を中止
368 | 回数指定中: 最後の文字を削除
369 | :ve[rsion] バージョン情報を表示
370 | :mode N MS-DOS: 画面モードを N (数字,C80,C4350,など)に
371 |
372 | :norm[al][!] {commands}通常モードコマンドを実行
373 | Q "Ex"モードに移行
374 |
375 | :redir >{file} メッセージを{file}にリダイレクト
376 | :silent[!] {command} {command} を寡黙に実行
377 | :confirm {command} 終了時、保存時などに保存していない変更やリードオンリーの確認をする
378 | :browse {command} ファイルを開く時や保存する時に選択ダイアログ画面を使う。
379 |
380 | ###コマンドラインの編集
381 |
382 | コマンドラインを破棄する('wildchar'がの場合は2回押す)
383 |
384 | CTRL-V {char} {char}を文字として挿入する(CTRL文字など)
385 | CTRL-V {number} 文字コードを10進数入力する(最大3桁まで)
386 | CTRL-R {0-9a-z"%#:-=} レジスタの内容を挿入する
387 |
388 | / カーソルを左右に移動
389 | / カーソルを単語単位で左右に移動
390 | CTRL-B/CTRL-E カーソルを行頭、行末に移動
391 |
392 | カーソルの直前の文字を削除
393 | カーソル位置の文字を削除
394 | CTRL-W カーソルの直前の文字を削除
395 | CTRL-U 全文字を削除
396 |
397 | / 現在のコマンドで始まるコマンドラインの履歴を呼び出す
398 | / コマンドラインの履歴を呼び出す
399 | :his[tory] コマンドライン履歴を表示
400 |
401 | ###コマンドラインの編集/文脈依存の補完機能
402 |
403 | CTRL-D 現在のカーソルの直前のパターンに合致する全ての名前の一覧を表示
404 | CTRL-A 現在のカーソルの直前のパターンに合致する全ての名前を挿入
405 | CTRL-L 現在のカーソルの直前のパターンに合致するもののうち、共通部分を挿入
406 |
407 | ###Exコマンドの範囲
408 |
409 | , 2つの行の範囲
410 | ; 同上。最初の指定行から次の指定範囲まで
411 |
412 | {number} ファイル中の行番号
413 | . 現在行
414 | $ ファイルの最終行
415 | % 1,$と同じ(=ファイル全体)
416 | * '<,'>と同じ(=ビジュアルモードの選択範囲)
417 | 't マーク t の行
418 | /{pattern}[/] {pattern} に合致する行の次の行
419 | ?{pattern}[?] {pattern} に合致する行の前の行
420 |
421 | +[num] 直前の行指定(デフォルト:1)に[num]を加算したもの
422 | -[num] 直前の行指定(デフォルト:1)から[num]を減算したもの
423 |
424 | ###特殊な Ex 文字
425 |
426 | | コマンドを2つに分割 (":global"と":!"では使用不可)
427 | " コメントの開始
428 |
429 | % 現在のファイル名(ファイル名を使うべき場所でのみ可)
430 | #[num] 別のファイル名[num] (ファイル名を使うべき場所でのみ可)
431 |
432 |
433 | ###!ありの場合: 現在のバッファに対する変更は破棄して、コマンド実行
434 | :e[dit][!] {file} {file}を編集
435 | :e[dit][!] 現在のバッファ内容を再読み込み
436 | :ene[w][!] 新たな名前なしバッファを編集
437 | :fin[d][!] {file} {file} を'path' から探し、編集
438 | ###ファイルの編集
439 | N CTRL-^ 別ファイル N を編集(":e #N"と同じ)
440 | gf or ]f カーソル下にある名前のファイルを編集
441 | :pwd カレントディレクトリを表示
442 | :cd [path] カレントディレクトリを [path] に変更
443 | :cd - 直前のカレントディレクトリに戻る
444 | :f[ile] 現在のファイル名とカーソル位置を表示
445 | :f[ile] {name} 現在のファイル名を{name}に変更
446 | :files 別ファイル一覧を表示
447 |
448 | ###保存と終了
449 |
450 | :[range]w[rite][!] 現在のファイルに保存
451 | :[range]w[rite] {file} {file}がなければ、{file}に保存。
452 | :[range]w[rite]! {file} {file}に保存。ファイルがあれば上書き。
453 | :[range]w[rite][!] >> 現在のファイルに追記
454 | :[range]w[rite][!] >> {file} {file}に追記
455 | :[range]w[rite] !{cmd} [range]の行を標準入力として{cmd}を実行。
456 | :[range]up[date][!] 変更されていれば、上書き保存
457 | :wa[ll][!] 変更のある全バッファを上書き保存
458 |
459 | :q[uit] 変更がなければ、現在のバッファを終了。他にヘルプ以外のバッファがなければvimを終了。
460 | :q[uit]! 変更を破棄して、現在のバッファを終了。他にヘルプ以外のバッファがなければvimを終了。
461 | :qa[ll] 変更がない限りvimを終了
462 | :qa[ll]! 変更があってもvimを強制終了
463 | :cq 保存せずに終了し、エラーコードを返す。
464 |
465 | :wq[!] 現ファイルを保存して終了
466 | :wq[!] {file} {file}に保存して終了
467 | :x[it][!] [file] ":wq"と同様だが、変更が加わっている場合のみ保存
468 | ZZ ":x"と同じ
469 | ZQ ":q!"と同じ
470 | :xa[ll][!] or :wqall[!] 変更のある全バッファを保存して終了
471 |
472 | :st[op][!] vimをサスペンドし、新たなシェルを起動。'aw'オプションがONで、[!]も指定していない場合はバッファを保存
473 | CTRL-Z ":stop"と同じ。
474 |
475 | ###複数ウィンドウコマンド
476 |
477 | CTRL-W s or :split ウィンドウを2つに分割
478 | :split {file} ウィンドウを2つに分割し、片方で{file}を開く
479 | :vsplit {file} 同上。ウインドウは縦分割。
480 | :vertical {cmd} {cmd}が縦分割するようにする
481 | :sf[ind] {file} ウィンドウを分割し、{file}を'path'中で探し、それを編集
482 | CTRL-W ] ウィンドウを分割し、カーソル下のタグにジャンプ
483 | CTRL-W f ウィンドウを分割し、カーソル下のファイルにジャンプ
484 | CTRL-W ^ ウィンドウを分割し、別ファイルにジャンプ
485 | CTRL-W n or :new 新たな空ウィンドウを作成
486 | CTRL-W q or :q[uit] 編集を終了しウィンドウを閉じる
487 | CTRL-W c or :cl[ose] バッファを隠しウィンドウを閉じる
488 | CTRL-W o or :on[ly] 画面を現在ウィンドウ1つだけにする
489 |
490 | CTRL-W j カーソルを下のウィンドウに移動
491 | CTRL-W k カーソルを上のウィンドウに移動
492 | CTRL-W CTRL-W カーソルを下のウィンドウに移動(wrap)
493 | CTRL-W W カーソルを上のウィンドウに移動(wrap)
494 | CTRL-W t カーソルを一番上のウィンドウに移動
495 | CTRL-W b カーソルを一番下のウィンドウに移動
496 | CTRL-W p カーソルを直前のアクティブウィンドウに移動
497 |
498 | CTRL-W r ウィンドウを下側にローテートする。
499 | CTRL-W R ウィンドウを上側にローテートする。
500 | CTRL-W x 現在のウィンドウを次のウィンドウと入れ換え
501 |
502 | CTRL-W = 全ウィンドウの高さを同一に
503 | CTRL-W - 現在のウィンドウの高さを減らす
504 | CTRL-W + 現在のウィンドウの高さを増やす
505 | CTRL-W _ 現在のウィンドウの高さを変更する(デフォルト:最大)
506 |
507 | ###バッファ管理コマンド
508 |
509 | :buffers or :files 全バッファとファイル名の一覧
510 |
511 | :ball or :sball 全引数/バッファを編集
512 | :unhide or :sunhide 読み込み中の全バッファを編集
513 |
514 | :badd {fname} ファイル名{fname}をバッファ一覧に追加
515 | :bunload[!] [N] [N]番バッファをメモリから開放
516 | :bdelete[!] [N] [N]番バッファを開放してバッファ一覧から削除
517 |
518 |
519 | ###シンタックスハイライト
520 |
521 | :syntax on シンタックスハイライトの使用開始
522 | :syntax off シンタックスハイライトの使用停止
523 |
524 | :syntax [list] 現在のシンタックスのアイテムを一覧する
525 | :syntax clear 全てのシンタックスを削除する
526 |
527 | :highlight clear 全てのハイライトを削除する
528 |
529 | :filetype on ファイルタイプの検出を有効にするシンタックスハイライトは有効にならない
530 | :filetype plugin indent onファイルタイプの検出を有効にする各設定とオートインデントを有効にする
531 |
532 |
533 | ###折り畳みコマンド
534 |
535 | set foldmethod=manual 手動で折畳み
536 | set foldmethod=indent インデントで折畳み
537 | set foldmethod=expr 'foldexpr'で折畳み
538 | set foldmethod=syntax シンタックスのリージョンで折畳み
539 | set foldmethod=marker 'foldmarker'で折畳み
540 |
541 | zf{motion} 手動で折畳みを定義する
542 | :{range}fold {range}範囲の行を折畳む
543 | zd カーソル下の1つの折畳みを削除する
544 | zD カーソル下の全ての折畳みを削除する
545 |
546 | zo カーソル下の折畳みを1段開く
547 | zO カーソル下の折畳みを全段開く
548 | zc カーソル下の折畳みを1段閉じる
549 | zC カーソル下の折畳みを全段閉じる
550 |
551 | zm 'foldlevel'を減らし、折畳みを増やす
552 | zM 'foldlevel'を0にし、全て折畳む
553 | zr 'foldlevel'を増やし、折畳を減らす
554 | zR 'foldlevel'を最大にし、全て開く
555 |
556 | zn 'foldenable'を無効にし、折畳み無し
557 | zN 'foldenable'を有効にし、折畳む
558 | zi 'foldenable'を反転させる
559 | EOF
560 |
561 | @lines.each do |line|
562 | if /^###/ =~ line
563 | label = line.sub /###/, ""
564 | @mode = Mode.where(label: label).first_or_create!
565 | elsif m = /^(?((N +)?[\x21-\x7e]+ ?)+)(?.+)/.match(line)
566 | command = m["command"].strip
567 | desc = m["desc"].strip
568 | desc = desc.sub(/^\d +/, "")
569 | #if desc.strip.empty? || /^不用/ =~ desc
570 | # next
571 | #end
572 | puts "Mode: #{@mode.label} Create Command:#{command} → #{desc}"
573 | @mode.vim_commands.create! command: command, description: desc, language: 'jp'
574 | end
575 | end
576 | end
577 | end
578 |
579 |
--------------------------------------------------------------------------------
/lib/tasks/insert_submode_jp.rake:
--------------------------------------------------------------------------------
1 | # encoding: UTF-8
2 | namespace :seed do
3 | desc "Insert Japanese submode Descriptions"
4 | task :insert_submode_jp => :environment do
5 | @lines = <<-EOF.split "\n"
6 | ###サブモード
7 | CTRL-X CTRL-D 定義済みの識別子を補完。
8 | CTRL-X CTRL-E ウィンドウを上へスクロール。
9 | CTRL-X CTRL-F ファイル名を補完。
10 | CTRL-X CTRL-I 識別子を補完。
11 | CTRL-X CTRL-K 辞書の識別子を補完。
12 | CTRL-X CTRL-L 行全体を補完。
13 | CTRL-X CTRL-N 次の補完候補。
14 | CTRL-X CTRL-O オムニ補完
15 | CTRL-X CTRL-P 前の補完候補。
16 | CTRL-X CTRL-S スペリング補完
17 | CTRL-X CTRL-T 類語による補完
18 | CTRL-X CTRL-Y ウィンドウを下へスクロール。
19 | CTRL-X CTRL-U 'completefunc'による補完
20 | CTRL-X CTRL-V コマンドラインと同様な補完
21 | CTRL-X CTRL-] タグを補完。
22 | CTRL-X s スペリング補完
23 | EOF
24 |
25 | @lines.each do |line|
26 | if /^###/ =~ line
27 | label = line.sub /###/, ""
28 | @mode = Mode.where(label: label).first_or_create!
29 | elsif m = /^(?([\x21-\x7e]+ ?)+)(?.+)/.match(line)
30 | command = m["command"].strip
31 | desc = m["desc"].strip
32 | desc = desc.sub(/^\d +/, "")
33 | if desc.strip.empty? || /^未使用/ =~ desc
34 | next
35 | end
36 | puts "Mode: #{@mode.label} Create Command:#{command} - #{desc}"
37 | @mode.vim_commands.create! command: command, description: desc, language: 'jp'
38 | end
39 | end
40 | end
41 | end
42 |
--------------------------------------------------------------------------------
/lib/tasks/insert_tw.rake:
--------------------------------------------------------------------------------
1 | # encoding: UTF-8
2 | namespace :seed do
3 | desc "Insert Traditional Chinese Descriptions"
4 | task :insert_tw => :environment do
5 | ActiveRecord::Base.transaction do
6 | language = 'tw'
7 | VimCommand.where(language: language).destroy_all
8 | mode = nil
9 | lines.each do |line|
10 | if /^###/ =~ line
11 | label = line.sub /###/, ""
12 | mode = Mode.where(label: label).first_or_create!
13 | elsif m = /^(?([\x21-\x7e]+ ?)+)(?.+)/.match(line)
14 | command = m["command"].strip
15 | desc = m["desc"].strip
16 | desc = desc.sub(/^\d +/, "")
17 | if desc.strip.empty? || /^無作用/ =~ desc
18 | next
19 | end
20 | puts "Mode: #{mode.label} Create Command:#{command} - #{desc}"
21 | mode.vim_commands.create! command: command, description: desc, language: language
22 | end
23 | end
24 | end
25 | end
26 |
27 | def lines
28 | <<-EOF.split "\n"
29 | ###插入模式
30 | CTRL-@ 插入最近插入的文字並停止插入。
31 | CTRL-A 插入最近插入的文字。
32 | CTRL-B 無作用 |i_CTRL-B-gone|。
33 | CTRL-C 退出插入模式,不檢查縮寫,除非置位了'insertmode'。
34 | CTRL-D 在該行刪除一個 shiftwidth 的縮排。
35 | CTRL-E 插入游標下方的字元。
36 | CTRL-F 無作用 (但預設是 'cinkeys' 中的一項,用以重新縮排本行)。
37 | CTRL-G CTRL-J 將游標往下移動一行 (等同於在編輯模式中按下 鍵)。
38 | CTRL-G j 將游標往下移動一行 (等同於在編輯模式中按下 鍵)。
39 | CTRL-G 將游標往下移動一行 (等同於在編輯模式中按下 鍵)。
40 | CTRL-G CTRL-K 將游標往上移動一行 (等同於在編輯模式中按下 鍵)。
41 | CTRL-G k 將游標往上移動一行 (等同於在編輯模式中按下 鍵)。
42 | CTRL-G 將游標往上移動一行 (等同於在編輯模式中按下 鍵)。
43 | CTRL-G u 開始新的不可還原的編輯。
44 | 刪除游標前的字元。
45 | {char1}{char2} 輸入二合字母 (只有開啟了 'digraph' 選項才有效)。
46 | CTRL-H 等同於 。
47 | 插入 字元。
48 | CTRL-I 等同於
49 | 等同於 。
50 | CTRL-J 等同於 。
51 | CTRL-K {char1} {char2} 輸入二合字母。
52 | CTRL-L 'insertmode' 開啟時: 離開插入模式。
53 | 開始新的一行。
54 | CTRL-M 等同於 。
55 | CTRL-N 尋找符合游標前面的下一個關鍵字。
56 | CTRL-O 執行單個指令然後回到插入模式。
57 | CTRL-P 尋找符合游標前面的上一個關鍵字。
58 | CTRL-Q 等同於 CTRL-V,除非用於終端控制流程。
59 | CTRL-R {0-9a-z"%#*:=} 插入暫存器內容。
60 | CTRL-R CTRL-R {0-9a-z"%#*:=} 按本義插入暫存器內容。
61 | CTRL-R CTRL-O {0-9a-z"%#*:=} 按本義插入暫存器內容,而且不自動縮排。
62 | CTRL-R CTRL-P {0-9a-z"%#*:=} 按本義插入暫存器內容,而且修正縮排。
63 | CTRL-S (用於終端控制流程)。
64 | CTRL-T 在該行插入一個 shiftwidth 的縮排。
65 | CTRL-U 刪除該行的所有輸入字元。
66 | CTRL-V {char} 按本義插入下一個非數字字元。
67 | CTRL-V {number} 插入三位十進制數字代表的單個字節。
68 | CTRL-W 刪除游標前的單字。
69 | CTRL-X {mode} 進入 CTRL-X 子模式,見 |i_CTRL-X_index|。
70 | CTRL-Y 插入游標上方的字元。
71 | CTRL-Z 'insertmode' 開啟時: 暫停 Vim。
72 | 結束插入模式 (除非開啟了 'insertmode')。
73 | CTRL-[ 等同於 。
74 | CTRL-\ CTRL-N 進入一般模式。
75 | CTRL-\ CTRL-G 進入 'insertmode' 指定的模式。
76 | CTRL-\ a - z 保留給外掛程式用。
77 | CTRL-\ others 無作用。
78 | CTRL-] 切換縮寫。
79 | CTRL-^ 切換 |:lmap| 映射的使用。
80 | CTRL-_ 'allowrevins' 開啟時: 變更語言 (希伯來語,波斯語等) {僅當編譯時加入|+rightleft| 特性才有效}。
81 | 0 CTRL-D 刪除該行的所有縮排。
82 | ^ CTRL-D 刪除該行的所有縮排,在下一行恢復刪除的縮排。
83 | 刪除游標所在的字元。
84 | 游標左移一個字元。
85 | 游標左移一個單字。
86 | 游標左移一個單字。
87 | 游標右移一個字元。
88 | 游標右移一個單字。
89 | 游標右移一個單字。
90 | 游標上移一行。
91 | 等同於 。
92 | 游標下移一行。
93 | 等同於 。
94 | 游標移到行首。
95 | 游標移到檔案開頭。
96 | 游標移到行尾後面。
97 | 游標移到檔案結尾。
98 | 上一個畫面。
99 | 下一個畫面。
100 | 等同於 。
101 |