├── .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 | {Join the chat at https://gitter.im/vim-tw/be_vimmer}[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 | 停止插入模式顯示說明視窗。 102 | 切換插入/替換模式。 103 | 游標移到滑鼠點擊處。 104 | 視窗向下捲動三行。 105 | 視窗向下捲動一頁。 106 | 視窗向上捲動三行。 107 | 視窗向上捲動一頁。 108 | 視窗向左捲動六列。 109 | 視窗向左捲動一頁。 110 | 視窗向右捲動六列。 111 | 視窗向右捲動一頁。 112 | ###submode 113 | CTRL-X CTRL-D 補齊定義過的標識符號。 114 | CTRL-X CTRL-E 上捲。 115 | CTRL-X CTRL-F 補齊檔案名稱。 116 | CTRL-X CTRL-I 補齊標識符號。 117 | CTRL-X CTRL-K 從字典補齊標識符號。 118 | CTRL-X CTRL-L 補齊完整的行。 119 | CTRL-X CTRL-N 下一個補齊。 120 | CTRL-X CTRL-O 全能 (omni) 補齊。 121 | CTRL-X CTRL-P 上一個補齊。 122 | CTRL-X CTRL-S 拼寫建議。 123 | CTRL-X CTRL-T 從同義詞詞典補齊標識符號。 124 | CTRL-X CTRL-U 用 'completefunc' 補齊。 125 | CTRL-X CTRL-V 如同 : 命令列那樣補齊。 126 | CTRL-X CTRL-Y 向下捲動。 127 | CTRL-X CTRL-] 補齊標籤。 128 | CTRL-X s 拼寫建議。 129 | ###一般模式 130 | CTRL-@ 無作用。 131 | CTRL-A 2 增加當前游標上的數值或者字母 [count]。 132 | CTRL-B 1 反向 (Back) 滾動 N 個畫面。 133 | CTRL-C 終止當前的 (搜尋) 指令。 134 | CTRL-D 向下 (Down) 滾動 N 行 (預設: 半個畫面)。 135 | CTRL-E 向上捲動 N 行 (附加 (Extra) N 行)。 136 | CTRL-F 1 向前 (Forward) 滾動 N 個畫面。 137 | CTRL-G 顯示當前的檔名、檔案狀態 (唯讀、已修改 ...) 和游標位置。 138 | 1 等同於 "h"。 139 | CTRL-H 1 等同於 "h"。 140 | 1 跳轉到跳轉表裡第 N 個較新的項目。 141 | CTRL-I 1 等同於 。 142 | 1 等同於 "j"。 143 | CTRL-J 1 等同於 "j"。 144 | CTRL-K 無作用。 145 | CTRL-L 重繪畫面。 146 | 1 游標移到 N 行下面的第一個字完。 147 | CTRL-M 1 等同於 。 148 | CTRL-N 1 等同於 "j"。 149 | CTRL-O 1 跳轉到跳轉表裡第 N 個較舊的項目。 150 | CTRL-P 1 等同於 "k"。 151 | CTRL-Q (用於終端控制流程)。 152 | CTRL-R 2 重做 'u' 還原的變更。 153 | CTRL-S (用於終端控制流程)。 154 | CTRL-T 跳轉到標籤清單的第 N 個較舊的標籤 (Tag)。 155 | CTRL-U 上捲 (Upwards) N 行 (預設: 半個畫面)。 156 | CTRL-V 開始面向列塊的可視 (Visual) 模式。 157 | CTRL-W {char} 視窗指令,見 |CTRL-W|。 158 | CTRL-X 2 減少當前游標上的數值或者字母 [count]。 159 | CTRL-Y 向下捲動 N 行。 160 | CTRL-Z 暫停程式 (或者啟動新的 shell)。 161 | CTRL-[ 無作用。 162 | CTRL-\ CTRL-N 進入一般模式 (Normal) 模式 (空動作)。 163 | CTRL-\ CTRL-G 進入 'insertmode' 指定的模式。 164 | CTRL-\ a - z 保留作外掛程式用。 165 | CTRL-\ others 無作用。 166 | CTRL-] :ta 到游標所在的標識符號。 167 | CTRL-^ 編輯第 N 個備用檔 (等同於 ":e #N")。 168 | CTRL-_ 無作用。 169 | 1 等同於 "l"。 170 | !{motion}{filter}2 通過 {filter} 指令過濾 Nmove 文字。 171 | !!{filter} 2 通過 {filter} 指令過濾 N 行。 172 | "{a-zA-Z0-9.%#:-"} 指定下次刪除、抽出或放置使用的暫存器{a-zA-Z0-9.%#:-"} (大寫用於添加)({.%#:} 只能用於放置)。 173 | # 1 反向搜尋第 N 次出現的游標所在的標識符號。 174 | $ 1 游標移動到往下第 N 行的行尾之後。 175 | % 1 尋找本行下一個括號 ({}/[]),並轉到其符合的括號上,或者轉到符合的註釋配對上,或者轉到符合的預處理指令上。。 176 | {count}% 1 轉到檔案百分之 N 的位置上。 177 | & 2 重複上次 :s。 178 | '{a-zA-Z0-9} 1 游標移動到位置標記 {a-zA-Z0-9} 所在行的第一個字元上。 179 | '' 1 游標移動到最近一次跳轉之前所在行的第一個字元上。 180 | '( 1 游標移動到該句的首部所在行的第一個字元上。 181 | ') 1 游標移動到該句的尾部所在行的第一個字元上。 182 | '< 1 游標移動到該緩衝區高亮 (highlight) 區開始/曾經開始的行的第一個字元上。 183 | '> 1 游標移動到該緩衝區高亮 (highlight) 區結束/曾經結束的行的第一個字元上。 184 | '[ 1 到上次改變或者抽出的文字的第一個字元。 185 | '] 1 到上次改變或者抽出文字的最後一個字元。 186 | '{ 1 游標移動到該段的首部所在行的第一個字元上。 187 | '} 1 游標移動到該段的尾部所在行的第一個字元上。 188 | ( 1 游標回退 N 個句子。 189 | ) 1 游標前進 N 個句子。 190 | * 1 正向搜尋第 N 次出現的游標所在的標識符號。 191 | + 1 等同於 。 192 | , 1 反方向重複最近的 f、t、F 或 T N 次。 193 | - 1 游標移動到上方 N 行的第一個字元上。 194 | . 2 重複最近的變更,其計數被 N 取代。 195 | /{pattern} 1 正向搜尋第 N 次出現的 {pattern}。 196 | / 1 正向搜尋最近一次搜尋使用的 {pattern}。 197 | 0 1 將游標移動到本行的第一個字元上。 198 | 1,2,3,4,5,6,7,8,9 附加於指令前,給出計數。 199 | : 1 開始進入 Ex 指令。 200 | {count}: 開始進入 Ex 指令,給出從該行開始到下方 N-1 行為止的行範圍。 201 | ; 1 重複最近的 f、t、F 或 T N 次。 202 | <{motion} 2 左移 Nmove text 行一個 'shiftwidth'。 203 | << 2 左移 N 行一個 'shiftwidth'。 204 | ={motion} 2 通過 "indent" 過濾 Nmove text 行。 205 | == 2 通過 "indent" 過濾 N 行。 206 | >{motion} 2 右移 Nmove text 一個 'shiftwidth'。 207 | >> 2 右移 N 行一個 'shiftwidth'。 208 | ?{pattern} 1 反向搜尋第 N 次出現的 {pattern}。 209 | ? 1 反向搜尋最近一次搜尋使用的 {pattern}。 210 | @{a-z} 2 執行 {a-z} 暫存器的內容 N 次。 211 | @: 重複上次的 ":" 指令 N 次。 212 | @@ 2 重複上次的 @{a-z} N 次。 213 | A 2 在行尾附加 text N 次。 214 | B 1 游標反向移動 N 個 word (字串)。 215 | ["x]C 2 從游標位置到行尾部分,再加上 N-1 行進行修改 [到暫存器 x];等同於 "c$"。 216 | ["x]D 2 刪除位置到行尾部分,再加上 N-1 行的字元 [到暫存器 x];等同於 "d$"。 217 | E 1 將游標正向移動到第 N 個 word 的結尾處。 218 | F{char} 1 游標左移到第 N 次出現的 {char} 上。 219 | G 1 游標移動到第 N 行,預設是最後一行。 220 | H 1 游標移動到畫面頂部開始算的第 N 行。 221 | I 2 在本行第一個字元之前插入 text N 次。 222 | J 2 連接 (Join) N 行;預設為 2。 223 | K 尋找游標所在的關鍵字 (Keyword),使用 'keywordprg' 的定義。 224 | L 1 游標移動到畫面底部開始算的第 N 行。 225 | M 1 游標移動到畫面的中間一行。 226 | N 1 反方向重複最近的 '/' 或 '?' 搜尋 N 次。 227 | O 2 在游標上方開始一個新行,並插入 text,重複 N 次。 228 | ["x]P 2 在游標放置 text [到暫存器 x] N 次。 229 | Q 切換到 "Ex" 模式。 230 | R 2 進入替換模式: 覆蓋存在的字元,重複輸入 text N-1 次。 231 | ["x]S 2 刪除 N 行 [到暫存器 x] 並開始輸入;等同於 "cc"。 232 | T{char} 1 游標移動到左側第 N 次出現的 {char} 之前。 233 | U 2 還原一行內最近所有的變更。 234 | V 進入面向行的可視 (Visual) 模式。 235 | W 1 游標前移 N 個 word。 236 | ["x]X 2 刪除游標前的 N 個字元 [到暫存器 x]。 237 | ["x]Y 抽出 N 行 [到暫存區 x];等同於 "yy"。 238 | ZZ 如果修改過,保存當前檔案,然後離開。 239 | ZQ 無論如何退出當前檔案。 240 | [{char} 方括號指令 (見下 |[|)。 241 | \ 無作用。 242 | ]{char} 方括號指令 (見下 |]|)。 243 | ^ 1 將游標移動到本行的第一個字元上。 244 | _ 1 游標移動到下方第 N - 1 行的第一個字元上。 245 | `{a-zA-Z0-9} 1 游標移動到位置標記 {a-zA-Z0-9}。 246 | `( 1 游標移動該句的開始處。 247 | `) 1 游標移動該句的結束處。 248 | `< 1 游標移動高亮 (highlight) 區域的開始處。 249 | `> 1 游標移動高亮 (highlight) 區域的結束處。 250 | `[ 1 到上次改變或者抽出的文字的第一個字元。 251 | `] 1 到上次改變或者抽出文字的最後一個字元。 252 | `` 1 游標移動最近一次跳轉的位置。 253 | `{ 1 游標移動到該段的開始處。 254 | `} 1 游標移動到該段的結束處。 255 | a 2 在游標處附加 text N 次。 256 | b 1 游標反向移動 N 個單字。 257 | ["x]c{motion} 2 刪除 Nmove text [到暫存區 x] 並開始編輯。 258 | ["x]cc 2 刪除 N 行 [到暫存區 x] 並開始編輯。 259 | ["x]d{motion} 2 刪除 Nmove text [到暫存區 x]。 260 | ["x]dd 2 刪除 N 行 [到暫存區 x]]。 261 | do 2 等同於 ":diffget"。 262 | dp 2 等同於 ":diffput"。 263 | e 1 將游標正向移動到第 N 個 word 的結尾處。 264 | f{char} 1 游標右移到第 N 次出現的 {char} 上。 265 | g{char} 外掛程式指令,見下 |g|。 266 | h 1 游標左移 N 個字元。 267 | i 2 在游標前插入text N 次。 268 | j 1 游標下移 N 行。 269 | k 1 游標上移 N 行。 270 | l 1 游標右移 N 個字元。 271 | m{A-Za-z} 在游標位置處設定位置標記 {A-Za-z}。 272 | n 1 重複最近的 '/' 或 '?' 搜尋 N 次。 273 | o 2 在游標下方開始一個新行,並插入 text,重複 N次。 274 | ["x]p 2 在游標後 [從暫存器 x] 放置 text N 次。 275 | q{0-9a-zA-Z"} 記錄輸入的字元到指令暫存器 {0-9a-zA-Z"}(大寫用於添加)。 276 | q (在記錄時) 停止記錄。 277 | q: 在命令列視窗裡編輯 : 命令列。 278 | q/ 在命令列視窗裡編輯 / 命令列。 279 | q? 在命令列視窗裡編輯 ? 命令列。 280 | r{char} 2 用 {char} 替換 N 個字元。 281 | ["x]s 2 (替換) 刪除 N 個字元 [到暫存區 x] 並開始輸入。 282 | t{char} 1 游標移動到右側第 N 次出現的 {char} 之前。 283 | u 2 還原變更。 284 | v 開始面向字元的可視 (Visual) 模式。 285 | w 1 游標前移 N 個單字。 286 | ["x]x 2 刪除游標開始的 N 個字元 [到暫存區 x]。 287 | ["x]y{motion} 抽出 Nmove text [到暫存區 x]。 288 | ["x]yy 抽出 N 行 [到暫存區 x]。 289 | z{char} 'z' 開始的指令,見下 |z|。 290 | { 1 游標反向移動 N 個段落。 291 | | 1 游標移到第 N 列。 292 | } 1 游標正向移動 N 個段落。 293 | ~ 2 'tildeop' 關閉時: 切換游標所在處開始的 N 個字元的大小寫,並右移游標 N 個字元。 294 | ~{motion} 'tildeop' 開啟時: 切換 Nmove text 的大小寫。 295 | 1 等同於 "G"。 296 | 1 等同於 "gg"。 297 | 1 等同於 "b"。 298 | ":ta" 到滑鼠點擊所在的單字上。 299 | 1 等同於 "w"。 300 | 等同於 "CTRL-T"。 301 | ["x] 2 等同於 "x"。 302 | {count} 刪除 {count} 最後的一位數字。 303 | 1 等同於 "j"。 304 | 1 等同於 "$"。 305 | 等同於 。 306 | 開啟說明視窗。 307 | 1 等同於 "0"。 308 | 2 等同於 "i"。 309 | 1 等同於 "h"。 310 | 1 移動游標到滑鼠點擊處。 311 | 2 等同於在滑鼠點擊處 "gP"。 312 | 等同於 CTRL-F。 313 | 等同於 CTRL-B。 314 | 1 等同於 "l"。 315 | 開始可視模式,移動游標到滑鼠點擊處。 316 | 1 等同於 CTRL-F。 317 | 1 等同於 "b"。 318 | 等同於在滑鼠點擊處 "*"。 319 | 1 等同於 "w"。 320 | 等同於在滑鼠點擊處 "#"。 321 | 1 等同於 CTRL-B。 322 | 2 等同於 "u"。 323 | 1 等同於 "k"。 324 | 視窗向下捲動三行。 325 | 視窗向下捲動一頁。 326 | 視窗向上捲動三行。 327 | 視窗向上捲動一頁。 328 | 視窗向左捲動六列。 329 | 視窗向左捲動一頁。 330 | 視窗向右捲動六列。 331 | 視窗向右捲動一頁。 332 | ###Text objects 333 | a" 雙引號字元串。 334 | a' 單引號字元串。 335 | a( 等同於 ab。 336 | a) 等同於 ab。 337 | a< "一個 <> 塊" 從 '<' 到符合的 '>'。 338 | a> 等同於 a<。 339 | aB "一個大塊" 從 "[{" 到 "]}" (帶上括號)。 340 | aW "一個字串" (帶上空白)。 341 | a[ "一個 [] 塊" 從 '[' 到符合的 ']'。 342 | a] 等同於 a[。 343 | a` 反引號字元串。 344 | ab "一個塊" 從 "[(" 到 "])" (帶上括號)。 345 | ap "一個段落" (帶上空白)。 346 | as "一個句子" (帶上空白)。 347 | at "一個標籤塊" (帶上空白)。 348 | aw "一個單字" (帶上空白)。 349 | a{ 等同於 aB。 350 | a} 等同於 aB。 351 | i" 雙引號字元串,不帶引號。 352 | i' 單引號字元串,不帶引號。 353 | i( 等同於 ib。 354 | i) 等同於 ib。 355 | i< "內含 <> 塊" 從 '<' 到符合的 '>'。 356 | i> 等同於 i<。 357 | iB "內含大塊" 從 "[{" 到 "]}"。 358 | iW "內含字串"。 359 | i[ "內含 [] 塊" 從 '[' 到符合的 ']'。 360 | i] 等同於 i[。 361 | i` 反引號字元串,不帶反引號。 362 | ib "內含塊" 從 "[(" 到 "])"。 363 | ip "內含段落"。 364 | is "內含句子"。 365 | it "內含標籤塊"。 366 | iw "內含單字"。 367 | i{ 等同於 iB。 368 | i} 等同於 iB。 369 | ###視窗指令 370 | CTRL-W CTRL-B 等同於 "CTRL-W b"。 371 | CTRL-W CTRL-C 等同於 "CTRL-W c"。 372 | CTRL-W CTRL-D 等同於 "CTRL-W d"。 373 | CTRL-W CTRL-F 等同於 "CTRL-W f"。 374 | CTRL-W CTRL-G 等同於 "CTRL-W g .."。 375 | CTRL-W CTRL-H 等同於 "CTRL-W h"。 376 | CTRL-W CTRL-I 等同於 "CTRL-W i"。 377 | CTRL-W CTRL-J 等同於 "CTRL-W j"。 378 | CTRL-W CTRL-K 等同於 "CTRL-W k"。 379 | CTRL-W CTRL-L 等同於 "CTRL-W l"。 380 | CTRL-W CTRL-N 等同於 "CTRL-W n"。 381 | CTRL-W CTRL-O 等同於 "CTRL-W o"。 382 | CTRL-W CTRL-P 等同於 "CTRL-W p"。 383 | CTRL-W CTRL-Q 等同於 "CTRL-W q"。 384 | CTRL-W CTRL-R 等同於 "CTRL-W r"。 385 | CTRL-W CTRL-S 等同於 "CTRL-W s"。 386 | CTRL-W CTRL-T 等同於 "CTRL-W t"。 387 | CTRL-W CTRL-V 等同於 "CTRL-W v"。 388 | CTRL-W CTRL-W 等同於 "CTRL-W w"。 389 | CTRL-W CTRL-X 等同於 "CTRL-W x"。 390 | CTRL-W CTRL-Z 等同於 "CTRL-W z"。 391 | CTRL-W CTRL-] 等同於 "CTRL-W ]"。 392 | CTRL-W CTRL-^ 等同於 "CTRL-W ^"。 393 | CTRL-W CTRL-_ 等同於 "CTRL-W _"。 394 | CTRL-W + 增加前視窗高度 N 行。 395 | CTRL-W - 減少當前視窗高度 N 行。 396 | CTRL-W < 減少當前視窗寬度 N 列。 397 | CTRL-W = 使得所有視窗同寬同高。 398 | CTRL-W > 增加當前視窗寬度 N 列。 399 | CTRL-W H 移動當前視窗到最左邊。 400 | CTRL-W J 移動當前視窗到最底部。 401 | CTRL-W K 移動當前視窗到最頂部。 402 | CTRL-W L 移動當前視窗到最右邊。 403 | CTRL-W P 跳轉到預覽視窗。 404 | CTRL-W R 向上旋轉視窗 N 次。 405 | CTRL-W S 等同於 "CTRL-W s"。 406 | CTRL-W T 移動當前視窗到新標籤頁。 407 | CTRL-W W 跳轉到前面第 N 個視窗 (迴繞)。 408 | CTRL-W ] 分割視窗並跳轉到游標所在的標籤上。 409 | CTRL-W ^ 分割視窗並編輯備用檔 N。 410 | CTRL-W _ 設定當前視窗高度為 N (預設: 儘量大)。 411 | CTRL-W b 跳轉到底部的視窗。 412 | CTRL-W c 關閉當前視窗 (類似於 |:close|)。 413 | CTRL-W d 分割視窗並跳轉到游標所在的定義上。 414 | CTRL-W f 分割視窗並跳轉到游標所在的檔名上。 415 | CTRL-W F 分割視窗並編輯游標所在的檔名,然後跳轉到檔名後給出的行號上。 416 | CTRL-W g CTRL-] 分割視窗並在游標所在的標籤上執行 |:tjump|。 417 | CTRL-W g ] 分割視窗並在游標所在的標籤上執行 |:tselect|。 418 | CTRL-W g } 在游標所在的標籤上執行 |:ptjump|。 419 | CTRL-W g f 在新分頁裡編輯游標所在的檔名。 420 | CTRL-W g F 在新分頁裡編輯游標所在的檔名然後跳轉到檔名後給出的行號上。 421 | CTRL-W h 跳轉到左面第 N 個的視窗 (在首個視窗上停止)。 422 | CTRL-W i 分割視窗並跳轉到游標所在的標識符號的聲明上。 423 | CTRL-W j 跳轉到下面第 N 個的視窗 (在最後視窗上停止)。 424 | CTRL-W k 跳轉到上面第 N 個的視窗 (在首個視窗上停止)。 425 | CTRL-W l 跳轉到右面第 N 個的視窗 (在最後視窗上停止)。 426 | CTRL-W n 開啟新視窗,N 行高。 427 | CTRL-W o 關閉除了當前視窗以外的所有視窗 (類似於|:only|)。 428 | CTRL-W p 轉到前面一個 (最近訪問的) 視窗。 429 | CTRL-W q 退出當前視窗 (類似於 |:quit|)。 430 | CTRL-W r 向下旋轉視窗 N 次。 431 | CTRL-W s 分割當前視窗為兩部分,新的視窗 N 行高。 432 | CTRL-W t 跳轉到頂部視窗。 433 | CTRL-W v 垂直分割當前視窗,新的視窗 N 列寬。 434 | CTRL-W w 轉到後面第 N 個視窗 (迴繞)。 435 | CTRL-W x 交換當前和第 N 個視窗 (預設: 下一個視窗)。 436 | CTRL-W z 關閉預覽視窗。 437 | CTRL-W | 設定視窗寬度為 N 列。 438 | CTRL-W } 在預覽視窗裡顯示游標所在的標籤。 439 | CTRL-W 等同於 "CTRL-W j"。 440 | CTRL-W 等同於 "CTRL-W k"。 441 | CTRL-W 等同於 "CTRL-W h"。 442 | CTRL-W 等同於 "CTRL-W l"。 443 | ###方括號指令 444 | [ CTRL-D 跳轉到第一個在當前檔案和它包含的標頭檔裡符合游標所在的單字的 #define,從當前檔案的頭部開始。 445 | [ CTRL-I 跳轉到第一個在當前檔案和它包含的標頭檔裡符合游標所在單字的位置,從當前檔案頭部開始。 446 | [# 1 游標移動到前面第 N 個未符合的 #if、#else 或者 #ifdef。 447 | [' 1 游標移動到前面的小寫位置標記,定位在它所在行的第一個非空白字元上。 448 | [( 1 游標移動到前面第 N 個未符合的 '('。 449 | [* 1 等同於 "[/"。 450 | [` 1 游標移動到前一個小寫位置標記。 451 | [/ 1 游標移動到前面第 N 個 C 註釋的開始處。 452 | [D 列出在當前檔案和它包含的標頭檔裡符合游標所在的單字的所有定義,從當前檔案的頭部開始。 453 | [I 列出在當前檔案和它包含的標頭檔裡符合游標所在單字的所有位置,從當前檔案的頭部開始。 454 | [P 2 等同於 "[p"。 455 | [[ 1 游標後退 N 個小節。 456 | [] 1 游標後退 N 個 SECTION。 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 | ] CTRL-D 跳轉到第一個在當前檔案和它包含的標頭檔裡符合游標所在的單字的 #define,從游標位置開始。 468 | ] CTRL-I 跳轉到第一個在當前檔案和它包含的標頭檔裡符合游標所在單字的位置,從游標位置開始。 469 | ]# 1 游標移動到後面第 N 個未符合的 #endif、#else。 470 | ]' 1 游標移動到後面的小寫位置標記,定位在它所在行的第一個非空白字元上。 471 | ]( 1 游標移動到後面第 N 個未符合的 ')'。 472 | ]* 1 等同於 "]/"。 473 | ]` 1 游標移動到後一個小寫位置標記。 474 | ]/ 1 游標移動到後面第 N 個 C 註釋的結尾處。 475 | ]D 列出在當前檔案和它包含的標頭檔裡符合游標所在的單字的所有定義,從游標位置開始。 476 | ]I 列出在當前檔案和它包含的標頭檔裡符合游標所在單字的所有位置,從游標位置開始。 477 | ]P 2 等同於 "[p"。 478 | ]] 1 游標前進 N 個小節。 479 | ]c 1 游標前進 N 個更改開始的地方。 480 | ]d 顯示第一個在當前檔案和它包含的標頭檔裡符合游標所在的單字的 #define,從游標位置開始。 481 | ]f 等同於 "gf"。 482 | ]i 顯示第一個在當前檔案和它包含的標頭檔裡符合游標所在單字的位置,從游標位置開始。 483 | ]m 1 游標前進 N 個成員函數的結尾。 484 | ]p 2 類似於 "p",但調整該行的縮排。 485 | ]s 1 移動到後一個拼字錯誤的單字。 486 | ]z 1 移動到開啟的摺疊的結尾處。 487 | ]{ 1 游標前進 N 個未符合的 '}'。 488 | ] 2 等同於 "]p"。 489 | ###'g' 開始的指令 490 | g CTRL-A 只有在編譯時加入了 MEM_PROFILE 時才有定義:轉存記憶體內容。 491 | g CTRL-G 顯示當前游標位置。 492 | g CTRL-H 啟動選擇列塊模式。 493 | g CTRL-] |:tjump| 到游標所在的標籤上。 494 | g# 1 類似於 "#",但不使用 "\<" 和 "\>"。 495 | g$ 1 'wrap' 關閉時轉到該行最右側畫面上可見的字元 'wrap' 開啟時轉到該畫面行最右側的字元。 496 | g& 2 在所有行上重複上次的 ":s"。 497 | g'{mark} 1 類似於 |'|,但不變更跳轉表。 498 | g`{mark} 1 類似於 |`|,但不改表跳轉表。 499 | g* 1 類似於 "*",但不使用 "\<" 和 "\>"。 500 | g0 1 'wrap' 關閉時轉到該行最左側畫面上可見的字元'wrap' 開啟時轉到該畫面行最左側的字元。 501 | g8 顯示游標所在的 UTF-8 字元的十六進制字節碼。 502 | g< 顯示上次的指令輸出。 503 | g? 2 Rot13 編碼操作符。 504 | g?? 2 Rot13 編碼該行。 505 | g?g? 2 Rot13 編碼該行。 506 | gD 1 轉到當前檔案的游標所在單字的定義。 507 | gE 1 反向轉移到上一個 word 的結尾處。 508 | gH 啟動選擇行模式。 509 | gI 2 類似於 "I",但總是從第一列開始。 510 | gJ 2 連接行,不插入空格。 511 | ["x]gP 2 在游標籤放置 text [從暫存器 x] N 次,游標留在插入 text 之後。 512 | gR 2 進入虛擬替換模式。 513 | gU{motion} 2 使得 Nmove text 全部大寫。 514 | gV 在執行選擇模式下的映射或者選單時,不要重複選擇過去的可視區域。 515 | g] :tselect 到游標所在的標籤上。 516 | g^ 1 'wrap' 關閉時轉到該行最左側畫面上可見的非空白字元 'wrap' 開啟時轉到該畫面行最左側的非空白字元。 517 | ga 印出游標所在處的字元的 ascii 值。 518 | gd 1 轉到當前函數裡當前游標所在的單字的定義。 519 | ge 1 反向轉到前一個單字的結尾處。 520 | gf 開始編輯當前游標所在的名字對應的檔案。 521 | gF 開始編輯游標所在的檔名並跳轉到檔名後的行號上。 522 | gg 1 游標移動到第 N 行,預設是第一行。 523 | gh 開始選擇模式。 524 | gi 2 類似於 "i",但先移動到 |'^| 位置標記。 525 | gj 1 類似於 "j",但 'wrap' 開啟時往下 N 個畫面行。 526 | gk 1 類似於 "k",但 'wrap' 開啟時往上 N 個畫面行。 527 | gm 1 轉到當前行正中間的那個字元。 528 | go 1 游標移動到緩衝區的第 N 個字節。 529 | ["x]gp 2 在游標後面放置 text [從暫存器 x] N 次,游標留在後面。 530 | gq{motion} 2 排版 Nmove text。 531 | gr{char} 2 虛擬替換 N 個字元為 {char}。 532 | gs 睡眠 N 秒 (預設 1)。 533 | gu{motion} 2 使得 Nmove text 全部小寫。 534 | gv 重新選擇上次的可視區域。 535 | gw{motion} 2 排版 Nmove text 並保持游標位置。 536 | gx 執行游標下的檔名對應的應用程式 (僅限於 |netrw| 外掛程式)。 537 | g@{motion} 調用 'operatorfunc'。 538 | g~{motion} 2 變更 Nmove text 的大小寫。 539 | g 1 等同於 "gj"。 540 | g 1 等同於 "g$"。 541 | g 1 等同於 "g0"。 542 | g 等同於 。 543 | g 等同於 。 544 | g 等同於 。 545 | g 1 等同於 "gk"。 546 | ###'z' 開始的指令 547 | z 重繪,游標移動到視窗的頂行的第一個非空白字元。 548 | z{height} 重繪,使得視窗高度為 {height} 行。 549 | z+ 游標移動到第 N 行 (預設為視窗之後的第一行),其它同 "z"。 550 | z- 重繪,游標移動到視窗末行的第一個非空白字元。 551 | z. 重繪,游標移動到視窗的中間行的第一個非空白字元。 552 | z= 取得拼字建議 (需先啟用 spell)。 553 | zA 遞迴開啟一個關閉的摺疊或關閉一個開啟的摺疊。 554 | zC 遞迴關閉摺疊。 555 | zD 遞迴刪除摺疊。 556 | zE 除去所有摺疊。 557 | zF 為 N 行建立摺疊。 558 | zG 把單字標記為拼寫正確 (good)。 559 | zM 設定 'foldlevel' 為零。 560 | zN 置位 'foldenable'。 561 | zO 遞迴開啟摺疊。 562 | zR 設定 'foldlevel' 為最大摺疊級別。 563 | zW 把單字標記為拼字錯誤 (wrong)。 564 | zX 重新套用 'foldlevel'。 565 | z^ 游標移動到第 N 行 (預設為視窗之前的一行),其它同 "z-"。 566 | za 開啟關閉的摺疊,或關閉開啟的摺疊。 567 | zb 重繪,游標在視窗底行。 568 | zc 關閉摺疊。 569 | zd 刪除摺疊。 570 | ze 'wrap' 關閉時,水平滾動使得游標定位到畫面的尾部 (最右側)。 571 | zf{motion} 為 Nmove text 建立摺疊。 572 | zg 把單字標記為拼寫正確 (good)。 573 | zh 'wrap' 關閉時,水平右捲畫面 N 個字元。 574 | zi 切換 'foldenable'。 575 | zj 1 移動到下一個摺疊的開始處。 576 | zk 1 移動到前一個摺疊的結束處。 577 | zl 'wrap' 關閉時,水平左捲畫面 N 個字元。 578 | zm 從 'foldlevel' 減 1。。 579 | zn 復位 'foldenable',所有的摺疊被開啟。。 580 | zo 開啟摺疊。 581 | zr 給 'foldlevel' 加 1。 582 | zs 'wrap' 關閉時,水平滾動使得游標定位到畫面的起始處 (最左側)。 583 | zt 重繪,游標移動到視窗的頂部。 584 | zw 把單字標記為拼字錯誤 (wrong)。 585 | zv 開啟足夠的摺疊,使得該行可見。 586 | zx 重新套用 'foldlevel' 然後執行 "zv"。 587 | zz 重繪,游標移動到視窗的中間行。 588 | z 等同於 "zh"。 589 | z 等同於 "zl"。 590 | ###可視模式 591 | CTRL-\ CTRL-N 結束可視模式。。 592 | CTRL-\ CTRL-G 轉到 'insertmode' 指定的模式。 593 | CTRL-C 結束可視模式。 594 | CTRL-G 在可視模式和選擇模式間切換。 595 | 2 選擇模式: 刪除高亮 (highlight) 區域。 596 | CTRL-H 2 等同於 。 597 | CTRL-O 從選擇模式切換到可視模式,只限於下個指令。 598 | CTRL-V 使得可視模式面向列塊,或者退出可視模式。 599 | 結束可視模式。 600 | CTRL-] 跳轉到高亮 (highlight) 的標籤上。 601 | !{filter} 2 通過外部指令 {filter} 過濾高亮 (highlight) 行。 602 | : 使用高亮 (highlight) 行作為範圍,開始一個命令列。 603 | < 2 左移高亮 (highlight) 行一個 'shiftwidth'。 604 | = 2 用 {equalprg} 選項指定的外部程式過濾高亮 (highlight) 行。 605 | > 2 右移高亮 (highlight) 行一個 'shiftwidth'。 606 | A 2 列塊模式下: 在高亮 (highlight) 區域的所有行後附加相同的 text。 607 | C 2 刪除高亮 (highlight) 行,並開始插入。 608 | D 2 刪除高亮 (highlight) 行。 609 | I 2 列塊模式: 在所有高亮 (highlight) 行之前插入相同的 text。 610 | J 2 連接高亮 (highlight) 行。 611 | K 在高亮 (highlight) 區域上運行 'keywordprg'。 612 | O 水平移動到區域的另外一側。 613 | Q 不啟動 Ex 模式。 614 | R 2 刪除高亮 (highlight) 行並開始插入。 615 | S 2 刪除高亮 (highlight) 行並開始插入。 616 | U 2 使得高亮 (highlight) 區域全變大寫。 617 | V 使得可視區域面向行,或者退出可視模式。 618 | X 2 刪除高亮 (highlight) 區域。 619 | Y 抽出高亮 (highlight) 行。 620 | a" 延伸高亮 (highlight) 區域,使包含一個雙引號字元串。 621 | a' 延伸高亮 (highlight) 區域,使包含一個單引號字元串。 622 | a( 等同於 ab。 623 | a) 等同於 ab。 624 | a< 延伸高亮 (highlight) 區域,使包含一個 <> 塊。 625 | a> 等同於 a<。 626 | aB 延伸高亮 (highlight) 區域,使包含一個 {} 塊。 627 | aW 延伸高亮 (highlight) 區域,使包含 "一個 word"。 628 | a[ 延伸高亮 (highlight) 區域,使包含一個 [] 塊。 629 | a] 等同於 a[。 630 | a` 延伸高亮 (highlight) 區域,使包含一個反引號字元串。 631 | ab 延伸高亮 (highlight) 區域,使包含一個 () 塊。 632 | ap 延伸高亮 (highlight) 區域,使包含一個段落。 633 | as 延伸高亮 (highlight) 區域,使包含一個句子。 634 | at 延伸高亮 (highlight) 區域,使包含一個標籤塊。 635 | aw 延伸高亮 (highlight) 區域,使包含 "一個單字"。 636 | a{ 等同於 aB。 637 | a} 等同於 aB。 638 | c 2 刪除高亮 (highlight) 區域,並開始插入。 639 | d 2 刪除高亮 (highlight) 區域。 640 | gJ 2 連接高亮 (highlight) 行,不插入空格。 641 | gq 2 排版高亮 (highlight) 行。 642 | gv 交換現在和以前的高亮 (highlight) 區域。 643 | i" 延伸高亮 (highlight) 區域,使包含一個雙引號字元串 (但不含引號)。 644 | i' 延伸高亮 (highlight) 區域,使包含一個單引號字元串 (但不含引號)。 645 | i( 等同於 ib。 646 | i) 等同於 ib。 647 | i< 延伸高亮 (highlight) 區域,使包含內含 <> 塊。 648 | i> 等同於 i<。 649 | iB 延伸高亮 (highlight) 區域,使包含內含 {} 塊。 650 | iW 延伸高亮 (highlight) 區域,使包含 "內含 word"。 651 | i[ 延伸高亮 (highlight) 區域,使包含內含 [] 塊。 652 | i] 等同於 i[。 653 | i` 延伸高亮 (highlight) 區域,使包含一個反引號字元串 (但不含反引號)。 654 | ib 延伸高亮 (highlight) 區域,使包含內含 () 塊。 655 | ip 延伸高亮 (highlight) 區域,使包含內含段落。 656 | is 延伸高亮 (highlight) 區域,使包含內含句子。 657 | it 延伸高亮 (highlight) 區域,使包含內含標籤塊。 658 | iw 延伸高亮 (highlight) 區域,使包含 "內含單字"。 659 | i{ 等同於 iB。 660 | i} 等同於 iB。 661 | o 移動游標到區域的另一側。 662 | r 2 刪除高亮 (highlight) 區域,並開始插入。 663 | s 2 刪除高亮 (highlight) 區域,並開始插入。 664 | u 2 使得高亮 (highlight) 區域全變小寫。 665 | v 使用可視模式,或者退出可視模式。 666 | x 2 刪除高亮 (highlight) 區域。 667 | y 抽出高亮 (highlight) 區域。 668 | ~ 2 變更高亮 (highlight) 區域的大小寫。 669 | ###命令列編輯 670 | CTRL-@ 無作用。 671 | CTRL-A 使用游標前面的模式進行補齊,並插入所有符合的指令。 672 | CTRL-B 游標移動到命令列開始的地方。 673 | CTRL-C 等同於 。 674 | CTRL-D 列出游標前面模式的所有補齊。 675 | CTRL-E 游標移動到命令列結束的地方。 676 | CTRL-F 'cedit' 的預設值: 開啟命令列視窗;否則無作用。 677 | CTRL-G 無作用。 678 | 刪除游標前面的字元。 679 | {char1} {char2} 'digraph' 開啟時,輸入二合字母。 680 | CTRL-H 等同於 。 681 | 如果 'wildchar' 是 : 補齊游標前面的模式。 682 | 等同於 CTRL-P。 683 | 'wildchar' 補齊游標前面的模式 (預設: )。 684 | CTRL-I 等同於 。 685 | 等同於 。 686 | CTRL-J 等同於 。 687 | CTRL-K {char1} {char2}輸入二合字母。 688 | CTRL-L 補齊游標前的模式,並插入最長的公共子串。 689 | 執行輸入的指令。 690 | CTRL-M 等同於 。 691 | CTRL-N 使用 'wildchar' 並有多個符合: 轉到下一個符合,不然: 等同於 。 692 | CTRL-O 不同。 693 | CTRL-P 使用 'wildchar' 並有多個符合: 轉到上一個符合,不然: 等同於 。 694 | CTRL-Q 等同於 CTRL-V,除非用於終端控制流。 695 | CTRL-R {0-9a-z"%#*:= CTRL-F CTRL-P CTRL-W CTRL-A}插入暫存器的內容或特殊對象到游標所在的地方,如同直接輸入那樣。 696 | CTRL-R CTRL-R {0-9a-z"%#*:= CTRL-F CTRL-P CTRL-W CTRL-A}按本義插入暫存器的內容或特殊對象到游標所在的地方。 697 | CTRL-S (用於終端控制流)。 698 | CTRL-T 無作用。 699 | CTRL-U 刪除所有字元。 700 | CTRL-V 按本義插入下一個非數字字元,或者插入其後三位數字所代表的單個字節。 701 | CTRL-W 刪除游標前面的單字。 702 | CTRL-X 無作用 (保留作補齊用)。 703 | CTRL-Y 複製 (抽出) 無模式的選擇。 704 | CTRL-Z 無作用 (保留作暫停用)。 705 | 放棄命令列,不執行。 706 | CTRL-[ 等同於 。 707 | CTRL-\ CTRL-N 轉到一般模式,放棄命令列。 708 | CTRL-\ CTRL-G 轉到 'insertmode' 指定的模式,放棄命令列。 709 | CTRL-\ a - d 保留給外掛程式用。 710 | CTRL-\ e {expr} 以 {expr} 的結果替換命令列。 711 | CTRL-\ f - z 保留給外掛程式用。 712 | CTRL-\ others 無作用。 713 | CTRL-] 啟用縮寫。 714 | CTRL-^ 切換 |:lmap| 映射的使用。 715 | CTRL-_ 'allowrevins' 開啟時: 變更語言 (希伯來,波斯)。 716 | 刪除游標所在的字元。 717 | 游標左移。 718 | 游標左移一個單字。 719 | 游標左移一個單字。 720 | 游標右移。 721 | 游標右移一個單字。 722 | 游標右移一個單字。 723 | 從歷史中調入符合游標前模式的前一個命令列。 724 | 從歷史中調入前一個命令列。 725 | 從歷史中調入符合游標前模式的後一個命令列。 726 | 從歷史中調入後一個命令列。 727 | 游標移動到命令列開始的地方。 728 | 游標移動到命令列結束的地方。 729 | 等同於 。 730 | 等同於 。 731 | 切換插入/替換模式。 732 | 游標移動到滑鼠點擊的地方。 733 | ###EX 指令 734 | :! 過濾行,或可通過外部指令執行之。 735 | :!! 重複上次的 ":!" 指令。 736 | :# 等同於 ":number"。 737 | :& 重複上次的 ":substitute"。 738 | :* 執行暫存器的內容。 739 | :< 將行左移一個 'shiftwidth'。 740 | := 顯示游標所在的行號。 741 | :> 將行右移一個 'shiftwidth'。 742 | :@ 執行暫存器的內容。 743 | :@@ 重複上次的 ":@"。 744 | :N[ext] 轉到參數清單的上一個檔案。 745 | :P[rint] 顯示行。 746 | :X 請求加密密鑰。 747 | :a[ppend] 附加 text。 748 | :ab[breviate] 輸入縮寫。 749 | :abc[lear] 刪除所有的縮寫。 750 | :abo[veleft] 使得分割的視窗出現在左側或者上方。 751 | :al[l] 為參數清單的每個檔案開啟一個視窗。 752 | :am[enu] 為所有模式輸入選單項。 753 | :an[oremenu] 為所有模式輸入選單項,不會被重新映射。 754 | :ar[gs] 顯示參數清單。 755 | :arga[dd] 增加項目到參數清單中。 756 | :argd[elete] 從參數清單中刪除項目。 757 | :arge[dit] 增加項目到參數清單中並編輯之。 758 | :argdo 在參數清單上的所有項目上執行一個指令。 759 | :argg[lobal] 定義全域參數清單。 760 | :argl[ocal] 定義本地參數清單。 761 | :argu[ment] 轉到參數清單一個指定的檔案。 762 | :as[cii] 顯示游標所在的字元的 ascii 值。 763 | :au[tocmd] 輸入或者顯示自動指令。 764 | :aug[roup] 選擇要用的自動指令組。 765 | :aun[menu] 刪除所有模式下的選單。 766 | :b[uffer] 轉到緩衝區清單裡的特定緩衝區。 767 | :bN[ext] 轉到緩衝區清單裡的上一個緩衝區。 768 | :ba[ll] 為緩衝區清單裡的每個緩衝區開啟一個視窗。 769 | :bad[d] 增加緩衝區到緩衝區清單。 770 | :bd[elete] 從緩衝區清單刪除緩衝區。 771 | :be[have] 設定滑鼠和選擇行為。 772 | :bel[owright] 使得分割的視窗出現在右側或者下方。 773 | :bf[irst] 轉到緩衝區清單裡的第一個緩衝區。 774 | :bl[ast] 轉到緩衝區清單裡的最後一個緩衝區。 775 | :bm[odified] 轉到緩衝區清單裡的下一個修改過的緩衝區。 776 | :bn[ext] 轉到緩衝區清單裡的下一個緩衝區。 777 | :bo[tright] 使得分割的視窗出現在最右側或者下方。 778 | :bp[revious] 轉到緩衝區清單裡的上一個緩衝區。 779 | :br[ewind] 轉到緩衝區清單裡的第一個緩衝區。 780 | :brea[k] 跳出 while 循環。 781 | :breaka[dd] 增加調試器斷點。 782 | :breakd[el] 刪除調試器斷點。 783 | :breakl[ist] 列出調試器斷點。 784 | :bro[wse] 使用檔案選擇對話框。 785 | :bufdo 為所有清單內緩衝區執行指令。 786 | :buffers 列出緩衝區清單裡的所有檔案。 787 | :bun[load] 卸載指定的緩衝區。 788 | :bw[ipeout] 真正刪除一個緩衝區。 789 | :c[hange] 替換一行或若干行。 790 | :cN[ext] 跳轉到上一個錯誤。 791 | :cNf[ile] 跳轉到前一個檔案的最後一個錯誤。 792 | :ca[bbrev] 類似於 ":abbreviate",但用於命令列模式。 793 | :cabc[lear] 清除所有縮寫,用於命令列模式。 794 | :caddb[uffer] 通過緩衝區補充錯誤。 795 | :cad[dexpr] 通過表達式補充錯誤。 796 | :caddf[ile] 加入錯誤訊息到當前 quickfix 清單。 797 | :cal[l] 調用函數。 798 | :cat[ch] :try 指令的一部分。 799 | :cb[uffer] 分析錯誤訊息並跳轉到第一個。 800 | :cc 跳轉到特定的錯誤。 801 | :ccl[ose] 關閉 quickfix 視窗。 802 | :cd 變更目錄。 803 | :ce[nter] 排版行,使其居中對齊。 804 | :cex[pr] 從表達式裡讀取錯誤並跳轉到第一個。 805 | :cf[ile] 讀入含有錯誤訊息的檔案,並跳轉到第一個。 806 | :cfir[st] 跳轉到指定的錯誤上,預設為第一個。 807 | :cgetb[uffer] 從緩衝區裡得到錯誤。 808 | :cgete[xpr] 從表達實裡得到錯誤。 809 | :cg[etfile] 讀入含有錯誤訊息的檔案。 810 | :cha[nges] 顯示修改的清單。 811 | :chd[ir] 變更當前目錄。 812 | :che[ckpath] 列出包含的標頭檔。 813 | :checkt[ime] 檢查載入緩衝區的時間標籤。 814 | :cl[ist] 列出所有錯誤。 815 | :cla[st] 跳轉到指定的錯誤上,預設為最後一個。 816 | :clo[se] 變更當前視窗。 817 | :cm[ap] 類似於 ":map",但用於命令列模式。 818 | :cmapc[lear] 清除所有映射,用於命令列模式。 819 | :cme[nu] 為命令列模式增加選單。 820 | :cn[ext] 跳轉到下一個錯誤。 821 | :cnew[er] 跳轉到下一個較新的錯誤清單。 822 | :cnf[ile] 跳轉到下一個檔案的第一個錯誤。 823 | :cno[remap] 類似於 ":noremap",但用於命令列模式。 824 | :cnorea[bbrev] 類似於 ":noreabbrev",但用於命令列模式。 825 | :cnoreme[nu] 類似於 ":noremenu",但用於命令列模式。 826 | :co[py] 複製行。 827 | :col[der] 跳轉到上一個較老的錯誤清單。 828 | :colo[rscheme] 載入特定的色彩方案。 829 | :com[mand] 建立用戶自定的指令。 830 | :comc[lear] 清除所有用戶自定的指令。 831 | :comp[iler] 為特定編譯器設定選項。 832 | :con[tinue] 回到 :while 開始處。 833 | :conf[irm] 需要確認時,提示用戶。 834 | :cope[n] 開啟 quickfix 視窗。 835 | :cp[revious] 跳轉到上一個錯誤。 836 | :cpf[ile] 跳轉到上一個檔案的最後一個錯誤。 837 | :cq[uit] 退出 Vim,帶錯誤碼。 838 | :cr[ewind] 跳到指定的錯誤,預設為第一個。 839 | :cs[cope] 執行 cscope 指令。 840 | :cst[ag] 使用 cscope 來跳轉到標籤上。 841 | :cu[nmap] 類似於 ":unmap",但用於命令列模式。 842 | :cuna[bbrev] 類似於 ":unabbrev",但用於命令列模式。 843 | :cunme[nu] 刪除命令列的選單。 844 | :cw[indow] 開啟或者關閉 quickfix 視窗。 845 | :d[elete] 刪除行。 846 | :delm[arks] 刪除位置標記。 847 | :deb[ug] 在調試模式執行指令。 848 | :debugg[reedy] 從正常的輸入那裡讀取調試模式指令。 849 | :delc[ommand] 刪除用戶自定的指令。 850 | :delf[unction] 刪除用戶函數。 851 | :dif[fupdate] 更新 'diff' 緩衝區。 852 | :diffg[et] 刪除該緩衝區的所有差異。 853 | :diffo[ff] 關閉 diff 模式。 854 | :diffp[atch] 套用 patch 然後顯示差異。 855 | :diffpu[t] 刪除另外一個緩衝區的差異。 856 | :diffs[plit] 顯示和另外一個檔案的差異。 857 | :diffthis 使得當前視窗成為 diff 視窗。 858 | :dig[raphs] 顯示或者輸入二合字母。 859 | :di[splay] 顯示暫存器。 860 | :dj[ump] 跳轉到 #define。 861 | :dl[ist] 列出所有的 #define。 862 | :do[autocmd] 在該緩衝區套用自動指令。 863 | :doautoa[ll] 在所有載入的緩衝區上套用自動指令。 864 | :dr[op] 跳到編輯某檔案的視窗,不成功則在當前視窗編輯之。 865 | :ds[earch] 列出一個 #define。 866 | :dsp[lit] 分割視窗並跳轉到 #define。 867 | :e[dit] 編輯檔案。 868 | :ea[rlier] 回到舊的變更,還原。 869 | :ec[ho] 回顯表達式結果。 870 | :echoe[rr] 類似於 :echo,如同錯誤一樣顯示和使用歷史。 871 | :echoh[l] 為 echo 等指令設定高亮 (highlight) 。 872 | :echom[sg] 等同於 :echo,在歷史裡放置消息。 873 | :echon 等同於 :echo,但不留 。 874 | :el[se] :if 指令的一部分。 875 | :elsei[f] :if 指令的一部分。 876 | :em[enu] 按名字執行選單。 877 | :en[dif] 結束最近的 :if。 878 | :endfo[r] 結束最近的 :for。 879 | :endf[unction] 結束用戶函數。 880 | :endt[ry] 結束最近的 :try。 881 | :endw[hile] 結束最近的 :while。 882 | :ene[w] 編輯新的無名緩衝區。 883 | :ex 等同於 ":edit"。 884 | :exe[cute] 執行表達式的結果產生的字元串。 885 | :exi[t] 等同於 ":xit"。 886 | :exu[sage] Ex 指令總覽。 887 | :f[ile] 顯示或者設定當前檔名。 888 | :files 列出緩衝區清單的所有檔案。 889 | :filet[ype] 切換檔案類型檢測的開啟/關閉。 890 | :fin[d] 在 'path' 裡找尋檔案並編輯之。 891 | :fina[lly] :try 指令的一部分。 892 | :fini[sh] 退出 Vim 腳本的執行。 893 | :fir[st] 轉到參數清單的第一個檔案。 894 | :fix[del] 設定 的鍵碼。 895 | :fo[ld] 建立摺疊。 896 | :foldc[lose] 關閉摺疊。 897 | :foldd[oopen] 對所有不在關閉摺疊的行執行指令。 898 | :folddoc[losed] 對所有在關閉摺疊的行執行指令。 899 | :foldo[pen] 開啟摺疊。 900 | :for for 循環。 901 | :fu[nction] 定義用戶函數。 902 | :g[lobal] 對符合的行執行指令。 903 | :go[to] 轉到緩衝區某字節處。 904 | :gr[ep] 執行 'grepprg' 並轉到第一個符合處。 905 | :grepa[dd] 類似 :grep,但附加到當前清單後。 906 | :gu[i] 啟動 GUI。 907 | :gv[im] 啟動 GUI。 908 | :ha[rdcopy] 發送內容到印表機。 909 | :h[elp] 開啟說明視窗。 910 | :helpf[ind] 開啟顯示說明視窗的對話框。 911 | :helpg[rep] 類似於 ":grep",但搜尋說明檔案。 912 | :helpt[ags] 為一個目錄產生說明標籤。 913 | :hi[ghlight] 指定高亮 (highlight) 方法。 914 | :hid[e] 為一個指令隱藏該緩衝區。 915 | :his[tory] 顯示歷史清單。 916 | :i[nsert] 插入 text。 917 | :ia[bbrev] 類似於 ":abbrev",但用於插入模式。 918 | :iabc[lear] 類似於 ":abclear",但用於插入模式。 919 | :if 條件滿足時執行指令。 920 | :ij[ump] 跳轉到標識符號的定義。 921 | :il[ist] 列出符合標識符號的行。 922 | :im[ap] 類似於 ":map",但用於插入模式。 923 | :imapc[lear] 類似於 ":map",但用於插入模式。 924 | :ime[nu] 為插入模式增加選單。 925 | :ino[remap] 類似於 ":noremap",但用於插入模式。 926 | :inorea[bbrev] 類似於 ":noreabbrev",但用於插入模式。 927 | :inoreme[nu] 類似於 ":noremenu",但用於插入模式。 928 | :int[ro] 顯示介紹文字。 929 | :is[earch] 列出符合標識符號的一行。 930 | :isp[lit] 分割視窗,並跳轉到標識符號的定義。 931 | :iu[nmap] 類似於 ":unmap",但用於插入模式。 932 | :iuna[bbrev] 類似於 ":unabbrev",但用於插入模式。 933 | :iunme[nu] 刪除插入模式的選單。 934 | :j[oin] 連接行。 935 | :ju[mps] 顯示跳轉表。 936 | :k 設定位置標記。 937 | :keepa[lt] 跟隨的指令保持輪換檔案不變。 938 | :kee[pmarks] 跟隨的指令保持位置標記不變。 939 | :keepj[jumps] 跟隨的指令保持跳轉表和位置標記不變。 940 | :lN[ext] 轉到位置清單的上一個位置。 941 | :lNf[ile] 轉到上個檔案的最近一個位置。 942 | :l[ist] 顯示行。 943 | :lad[dexpr] 通過表達式補充位置。 944 | :laddb[uffer] 通過緩衝區補充位置。 945 | :laddf[ile] 把位置加到當前位置清單裡。 946 | :la[st] 轉到參數清單的最後一個檔案。 947 | :lan[guage] 設定語言 (locale)。 948 | :lat[er] 轉到新的變更,重做。 949 | :lb[uffer] 分析位置並跳轉到第一個位置。 950 | :lc[d] 變更本地的目錄。 951 | :lch[dir] 變更本地的目錄。 952 | :lcl[ose] 關閉位置視窗。 953 | :lcs[cope] 類似於 ":cscope",但使用位置清單。 954 | :le[ft] 左對齊行。 955 | :lefta[bove] 使得分割的視窗出現在左側或者上方。 956 | :let 給變數或選項賦值。 957 | :lex[pr] 從表達式裡讀取位置並跳轉到第一個。 958 | :lf[ile] 從檔案裡讀取位置並跳轉到第一個。 959 | :lfir[st] 轉到指定的位置上,預設第一個。 960 | :lgetb[uffer] 從緩衝區裡讀取位置。 961 | :lgete[xpr] 從表達式裡讀取位置。 962 | :lg[etfile] 從檔案裡讀取位置。 963 | :lgr[ep] 運行 'grepprg' 並跳轉到第一個符合。 964 | :lgrepa[dd] 類似於 :grep,但附加到當前清單上。 965 | :lh[elpgrep] 類似於 ":helpgrep",但使用位置清單。 966 | :ll 轉到指定位置。 967 | :lla[st] 轉到指定位置,預設最後一個。 968 | :lli[st] 列出所有的位置。 969 | :lmak[e] 執行外部指令 'makeprg' 並分析錯誤訊息。 970 | :lm[ap] 類似於 ":map!",但包括 Lang-Arg 模式。 971 | :lmapc[lear] 類似於 ":mapclear!",但包括 Lang-Arg 模式。 972 | :lne[xt] 跳到下一個位置。 973 | :lnew[er] 跳到較新的位置清單。 974 | :lnf[ile] 跳到下一個檔案的第一個位置。 975 | :ln[oremap] 類似於 ":noremap!",但包括 Lang-Arg 模式。 976 | :loadk[eymap] 載入後面的鍵盤映射表,直到 EOF 為止。 977 | :lo[adview] 從檔案裡為當前視窗載入視圖。 978 | :loc[kmarks] 跟隨的指令保持位置標記不變。 979 | :lockv[ar] 給變數加鎖。 980 | :lol[der] 轉到較舊的位置清單。 981 | :lope[n] 開啟位置視窗。 982 | :lp[revious] 轉到前一個位置。 983 | :lpf[ile] 轉到上一個檔案的最近的位置。 984 | :lr[ewind] 轉到指定的位置,預設第一個。 985 | :ls 列出所有的緩衝區。 986 | :lt[ag] 跳轉到標籤,並把符合的標籤加到位置清單上。 987 | :lu[nmap] 類似於 ":unmap!",但包括 Lang-Arg 模式。 988 | :lua 執行 |Lua| 指令。 989 | :luad[o] 對每行都執行 Lua 指令。 990 | :luaf[ile] 執行 |Lua| 指令檔。 991 | :lv[imgrep] 在若干檔案裡搜尋模式。 992 | :lvimgrepa[dd] 類似於 :vimgrep,但附加到當前清單。 993 | :lw[indow] 開啟或關閉位置視窗。 994 | :m[ove] 移動行。 995 | :ma[rk] 設定位置標記。 996 | :mak[e] 執行外部指令 'makeprg' 並分析其錯誤訊息。 997 | :map 顯示或者輸入映射。 998 | :mapc[lear] 清除所有普通和可視模式的映射。 999 | :marks 列出所有的位置標記。 1000 | :mat[ch] 定義要高亮 (highlight) 顯示的符合的模式。 1001 | :me[nu] 輸入新的選單項。 1002 | :menut[ranslate] 增加選單翻譯項目。 1003 | :mes[sages] 顯示以前顯示的消息。 1004 | :mk[exrc] 寫入當前映射和設定到檔案。 1005 | :mks[ession] 寫入 session 資訊到檔案。 1006 | :mksp[ell] 生成 .spl 拼寫檔案。 1007 | :mkv[imrc] 寫入當前映射和設定到檔案。 1008 | :mkvie[w] 寫入當前視窗的視圖到檔案。 1009 | :mod[e] 顯示或者變更畫面模式。 1010 | :mz[scheme] 執行 MzScheme 指令。 1011 | :mzf[ile] 執行 MzScheme 指令檔。 1012 | :nbc[lose] 關閉當前 Netbeans 會話。 1013 | :nb[key] 傳遞一個鍵給 Netbeans。 1014 | :nbs[art] 開啟一個新的 Netbeans 會話。 1015 | :n[ext] 跳轉到參數清單的下一個檔案。 1016 | :new 建立一個新的空白視窗。 1017 | :nm[ap] 類似於 ":map",但使用一般模式。 1018 | :nmapc[lear] 清除一般模式的所有映射。 1019 | :nme[nu] 為一般模式增加選單。 1020 | :nn[oremap] 類似於 ":noremap",但使用一般模式。 1021 | :nnoreme[nu] 類似於 ":noremenu",但使用一般模式。 1022 | :noa[utocmd] 跟隨的指令不啟用自動指令。 1023 | :no[remap] 輸入不會被重新映射的映射。 1024 | :noh[lsearch] 暫停 'hlsearch' 高亮 (highlight) 。 1025 | :norea[bbrev] 輸入不會被重新映射的縮寫。 1026 | :noreme[nu] 輸入不會被重新映射的選單。 1027 | :norm[al] 執行一般模式的指令。 1028 | :nu[mber] 顯示 text 行時給出行號。 1029 | :nun[map] 類似於 ":unmap",但使用一般模式。 1030 | :nunme[nu] 刪除一般模式的選單。 1031 | :ol[dfiles] 列出 viminfo 檔案中包含位置標記的檔案。 1032 | :o[pen] 啟動開啟模式 (沒有實現)。 1033 | :om[ap] 類似於 ":map",但使用操作符等待模式。 1034 | :omapc[lear] 刪除操作符等待模式的所有映射。 1035 | :ome[nu] 為操作符等待模式增加選單。 1036 | :on[ly] 關閉當前視窗,除了當前的視窗以外。 1037 | :ono[remap] 類似於 ":noremap",但使用操作符等待模式。 1038 | :onoreme[nu] 類似於 ":noremenu",但使用操作符等待模式。 1039 | :opt[ions] 開啟選項視窗。 1040 | :ou[nmap] 類似於 ":unmap",但使用操作符等待模式。 1041 | :ounme[nu] 刪除操作符等待模式的選單。 1042 | :ow[nsyntax] 為本視窗設定新的局部語法高亮 (highlight) 。 1043 | :p[rint] 顯示行。 1044 | :profd[el] 停止剖視 (profile) 函數或腳本。 1045 | :prof[ile] 剖視 (profile) 函數或腳本。 1046 | :pro[mptfind] 開啟 GUI 對話框進行搜尋。 1047 | :promptr[epl] 開啟 GUI 對話框進行搜尋/替代。 1048 | :pc[lose] 關閉預覽視窗。 1049 | :ped[it] 在預覽視窗編輯檔案。 1050 | :pe[rl] 執行 Perl 指令。 1051 | :perld[o] 對每行都執行 Perl 指令。 1052 | :po[p] 跳轉到標籤棧較舊的項目上。 1053 | :pop[up] 根據名字彈出選單。 1054 | :pp[op] 在預覽視窗 ":pop"。 1055 | :pre[serve] 寫入所有 text 到交換檔案。 1056 | :prev[ious] 跳轉到參數清單裡的上一個檔案。 1057 | :ps[earch] 類似於 ":ijump",但在預覽視窗顯示符合。 1058 | :pt[ag] 在預覽視窗顯示標籤。 1059 | :ptN[ext] 在預覽視窗 |:tNext|。 1060 | :ptf[irst] 在預覽視窗 |:trewind|。 1061 | :ptj[ump] 在預覽視窗 |:tjump| 和顯示標籤。 1062 | :ptl[ast] 在預覽視窗 |:tlast|。 1063 | :ptn[ext] 在預覽視窗 |:tnext|。 1064 | :ptp[revious] 在預覽視窗 |:tprevious|。 1065 | :ptr[ewind] 在預覽視窗 |:trewind|。 1066 | :pts[elect] 在預覽視窗 |:tselect| 和顯示標籤。 1067 | :pu[t] 插入暫存器的內容到 text。 1068 | :pw[d] 顯示當前目錄。 1069 | :py3 執行 Python 3 指令。 1070 | :python3 同 :py3。 1071 | :py3f[ile] 執行 Python 3 指令檔。 1072 | :py[thon] 執行 Python 指令。 1073 | :pyf[ile] 執行 Python 指令檔。 1074 | :q[uit] 退出當前視窗 (如果只有一視窗,則退出 Vim)。 1075 | :quita[ll] 退出 Vim。 1076 | :qa[ll] 退出 Vim。 1077 | :r[ead] 讀入檔案內容。 1078 | :rec[over] 從 swap 檔裡還原檔案。 1079 | :red[o] 重做一次還原的變更。 1080 | :redi[r] 重定向消息到檔案或者暫存器。 1081 | :redr[aw] 強迫顯示的重繪。 1082 | :redraws[tatus] 強迫狀態列的重繪。 1083 | :reg[isters] 顯示暫存器的內容。 1084 | :res[ize] 變更當前視窗的高度。 1085 | :ret[ab] 變更製表大小。 1086 | :retu[rn] 從用戶函數返回。 1087 | :rew[ind] 轉到參數清單的第一個檔案。 1088 | :ri[ght] 右對齊 text。 1089 | :rightb[elow] 使得分割視窗出現在右側或者下方。 1090 | :rub[y] 執行 Ruby 指令。 1091 | :rubyd[o] 對每行執行 Ruby 指令。 1092 | :rubyf[ile] 執行 Ruby 指令檔。 1093 | :rund[o] 從檔案裡讀入還原資訊。 1094 | :ru[ntime] 執行 'runtimepath' 裡的 vim 腳本。 1095 | :rv[iminfo] 讀取 viminfo 檔案。 1096 | :s[ubstitute] 尋找和替代 text。 1097 | :sN[ext] 分割視窗並轉到參數清單的前一個檔案。 1098 | :san[dbox] 在沙盤裡執行指令。 1099 | :sa[rgument] 分割視窗並轉到參數清單的某一個檔案。 1100 | :sal[l] 為參數清單的每個檔案開啟視窗。 1101 | :sav[eas] 用別的名字保存檔案。 1102 | :sb[uffer] 分割視窗並轉到緩衝區清單的某一個檔案。 1103 | :sbN[ext] 分割視窗並轉到緩衝區清單的前一個檔案。 1104 | :sba[ll] 為緩衝區清單的每個檔案開啟視窗。 1105 | :sbf[irst] 分割視窗並轉到緩衝區清單的第一個檔案。 1106 | :sbl[ast] 分割視窗並轉到緩衝區清單的最後一個檔案。 1107 | :sbm[odified] 分割視窗並轉到緩衝區清單的修改過的檔案。 1108 | :sbn[ext] 分割視窗並轉到緩衝區清單的後一個檔案。 1109 | :sbp[revious] 分割視窗並轉到緩衝區清單的前一個檔案。 1110 | :sbr[ewind] 分割視窗並轉到緩衝區清單的第一個檔案。 1111 | :scrip[tnames] 列出所有執行過的 Vim 腳本的名字。 1112 | :scripte[ncoding] 執行過的 Vim 腳本使用的編碼。 1113 | :scs[cope] 分割視窗並執行 cscope 指令。 1114 | :se[t] 顯示或設定選項。 1115 | :setf[iletype] 設定 'filetype',除非已經設定過。 1116 | :setg[lobal] 顯示或者設定全域選項值。 1117 | :setl[ocal] 顯示或者設定本地選項值。 1118 | :sf[ind] 分割當前視窗並編輯 'path' 的檔案。 1119 | :sfir[st] 分割視窗並轉到參數清單的第一個檔案。 1120 | :sh[ell] 切換到 shell。 1121 | :sim[alt] Win32 GUI: 模擬 Windows ALT 鍵。 1122 | :sig[n] 操作標號。 1123 | :sil[ent] 安靜地運行指令。 1124 | :sl[eep] 幾秒內不作任何事。 1125 | :sla[st] 分割視窗並轉到參數清單的最後一個檔案。 1126 | :sm[agic] 帶 'magic' 的 :substitute。 1127 | :sma[p] 類似於 ":map",但用於選擇模式。 1128 | :smapc[lear] 刪除選擇模式所有的映射。 1129 | :sme[nu] 增加選擇模式選單。 1130 | :sn[ext] 分割視窗並轉到參數清單的下一個檔案。 1131 | :sni[ff] 發送請求到 sniff。 1132 | :sno[magic] 帶 'nomagic' 的 :substitute。 1133 | :snor[emap] 類似於 ":noremap",但用於選擇模式。 1134 | :snoreme[nu] 類似於 ":noremenu",但用於選擇模式。 1135 | :sor[t] 給行排序。 1136 | :so[urce] 從檔案裡讀取 Vim 或 Ex 指令。 1137 | :spelld[ump] 分割視窗並用正確的單字填充。 1138 | :spe[llgood] 增加拼寫的好詞。 1139 | :spelli[nfo] 顯示載入的拼寫檔案的資訊。 1140 | :spellr[epall] 像上次 |z=| 那樣,但替換所有的壞詞。 1141 | :spellu[ndo] 刪除好詞或壞詞。 1142 | :spellw[rong] 增加拼字錯誤。 1143 | :sp[lit] 分割當前視窗。 1144 | :spr[evious] 分割視窗並轉到參數清單的前一個檔案。 1145 | :sre[wind] 分割視窗並轉到參數清單的第一個檔案。 1146 | :st[op] 暫停編輯器並退回 shell。 1147 | :sta[g] 分割視窗並跳轉到標籤上。 1148 | :startg[replace] 開始虛擬替換模式。 1149 | :startr[eplace] 開始替換模式。 1150 | :star[tinsert] 開始插入模式。 1151 | :stopi[nsert] 退出插入模式。 1152 | :stj[ump] 執行 ":tjump" 並分割視窗。 1153 | :sts[elect] 執行 ":tselect" 並分割視窗。 1154 | :sun[hide] 等同於 ":unhide"。 1155 | :sunm[ap] 類似於 ":unmap",但用於選擇模式。 1156 | :sunme[nu] 刪除選擇模式的選單。 1157 | :sus[pend] 等同於 ":stop"。 1158 | :sv[iew] 分割視窗並以唯讀模式編輯檔案。 1159 | :sw[apname] 顯示當前交換檔案的名字。 1160 | :sy[ntax] 語法高亮 (highlight) 。 1161 | :sync[bind] 同步滾動綁定。 1162 | :t 等同於 ":copy"。 1163 | :tN[ext] 跳轉到上一個符合的標籤。 1164 | :tabN[ext] 跳到上一個標籤頁。 1165 | :tabc[lose] 關閉當前標籤頁。 1166 | :tabdo 為每個標籤頁執行指令。 1167 | :tabe[dit] 在新標籤頁裡編輯檔案。 1168 | :tabf[ind] 尋找 'path' 裡的檔案,在新標籤頁裡編輯之。 1169 | :tabfir[st] 轉到第一個標籤頁。 1170 | :tabl[ast] 轉到最後一個標籤頁。 1171 | :tabm[ove] 把標籤頁移到別的位置。 1172 | :tabnew 在新標籤頁裡編輯檔案。 1173 | :tabn[ext] 轉到下一個標籤頁。 1174 | :tabo[nly] 關閉所有除了當前標籤頁以外的所有標籤頁。 1175 | :tabp[revious] 轉到前一個標籤頁。 1176 | :tabr[ewind] 轉到第一個標籤頁。 1177 | :tabs 列出標籤頁以及裡面包含的內容。 1178 | :tab 開啟新視窗時建立新分頁。 1179 | :ta[g] 跳轉到標籤上。 1180 | :tags 顯示標籤棧的內容。 1181 | :tc[l] 執行 Tcl 指令。 1182 | :tcld[o] 為每行執行 Tcl 指令。 1183 | :tclf[ile] 執行 Tcl 指令檔。 1184 | :te[aroff] 撕下一個選單。 1185 | :tf[irst] 轉到第一個符合的標籤。 1186 | :th[row] 拋出例外。 1187 | :tj[ump] 類似於 ":tselect",只有一個符合時直接跳轉之。 1188 | :tl[ast] 跳轉到最後一個符合的標籤。 1189 | :tm[enu] 定義選單的工具提示。 1190 | :tn[ext] 跳轉到下一個符合的標籤。 1191 | :to[pleft] 使得分割的視窗出現在頂部或者最左邊。 1192 | :tp[revious] 跳轉到上一個符合的標籤。 1193 | :tr[ewind] 跳轉到第一個符合的標籤。 1194 | :try 執行指令,錯誤或者例外時終止。 1195 | :ts[elect] 列出符合的標籤並從中選擇一個。 1196 | :tu[nmenu] 刪除選單的工具提示。 1197 | :u[ndo] 還原最近的變更。 1198 | :undoj[oin] 將下一個變更和上一個還原區塊合併。 1199 | :undol[ist] 列出還原樹的葉節點。 1200 | :una[bbreviate] 刪除縮寫。 1201 | :unh[ide] 為緩衝區清單裡每個載入的檔案開啟視窗。 1202 | :unl[et] 刪除變數。 1203 | :unlo[ckvar] 給變數解鎖。 1204 | :unm[ap] 刪除映射。 1205 | :unme[nu] 刪除選單。 1206 | :uns[ilent] 非安靜模式執行指令。 1207 | :up[date] 如果有修改,寫回緩衝區。 1208 | :v[global] 對不符合的行,執行指令。 1209 | :ve[rsion] 顯示版本編號和其它資訊。 1210 | :verb[ose] 執行指令,過程中設定 'verbose'。 1211 | :vert[ical] 使得跟隨的指令垂直分割。 1212 | :vim[grep] 在若干檔案裡尋找模式。 1213 | :vimgrepa[dd] 類似於 :vimgrep,但附加到當前清單。 1214 | :vi[sual] 等同於 ":edit",但關掉 "Ex" 模式。 1215 | :viu[sage] 一般模式指令的總覽。 1216 | :vie[w] 以唯讀方式編輯檔案。 1217 | :vm[ap] 類似於 ":map",但使用可視+選擇模式。 1218 | :vmapc[lear] 刪除可視+選擇模式所有的映射。 1219 | :vme[nu] 為可視+選擇模式增加選單。 1220 | :vne[w] 建立新的空白視窗,垂直分割。 1221 | :vn[oremap] 類似於 ":noremap",但使用可視+選擇模式。 1222 | :vnoreme[nu] 類似於 ":noremenu",但使用可視+選擇模式。 1223 | :vs[plit] 垂直分割當前視窗。 1224 | :vu[nmap] 類似於 ":unmap",但使用可視+選擇模式。 1225 | :vunme[nu] 刪除可視+選擇模式的選單。 1226 | :windo 為每個視窗執行指令。 1227 | :w[rite] 寫回檔案。 1228 | :wN[ext] 寫回檔案,然後跳轉到參數清單的前一個檔案。 1229 | :wa[ll] 寫回所有 (變更的) 緩衝區。 1230 | :wh[ile] 只要條件滿足,執行循環體。 1231 | :wi[nsize] 取得或者設定視窗大小 (已廢棄)。 1232 | :winc[md] 執行視窗 (CTRL-W) 指令。 1233 | :winp[os] 取得或者設定視窗位置。 1234 | :wn[ext] 寫回檔案,然後跳轉到參數清單的下一個檔案。 1235 | :wp[revious] 寫回檔案,然後跳轉到參數清單的前一個檔案。 1236 | :wq 寫回檔案,然後退出視窗或者 Vim。 1237 | :wqa[ll] 寫回所有 (變更的) 緩衝區然後退出 Vim。 1238 | :ws[verb] 把動詞通過 IPC 發送給 workshop。 1239 | :wu[ndo] 把還原資訊寫入檔案。 1240 | :wv[iminfo] 寫入 viminfo 檔。 1241 | :x[it] 如果緩衝區被改動,寫入之後退出視窗或者 Vim。 1242 | :xa[ll] 等同於 ":wqall"。 1243 | :xmapc[lear] 刪除可視模式的所有映射。 1244 | :xm[ap] 類似於 ":map",但使用可視模式。 1245 | :xme[nu] 增加可視模式的選單。 1246 | :xn[oremap] 類似於 ":noremap",但使用可視模式。 1247 | :xnoreme[nu] 類似於 ":noremenu",但使用可視模式。 1248 | :xu[nmap] 類似於 ":unmap",但使用可視模式。 1249 | :xunme[nu] 刪除可視模式的選單。 1250 | :y[ank] 抽出行到暫存器。 1251 | :z 顯示一些行。 1252 | EOF 1253 | end 1254 | end 1255 | -------------------------------------------------------------------------------- /lib/tasks/update_current_jp.rake: -------------------------------------------------------------------------------- 1 | namespace :seed do 2 | desc "Update current jp to jp_old" 3 | task :update_current_jp => :environment do 4 | VimCommand.update_all("language = 'jp_old'", "language = 'jp'") 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /lib/tasks/update_language.rake: -------------------------------------------------------------------------------- 1 | namespace :seed do 2 | desc "Update language column" 3 | task :update_language => :environment do 4 | VimCommand.update_all("language = 'jp'") 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /log/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/log/.gitkeep -------------------------------------------------------------------------------- /public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The page you were looking for doesn't exist (404) 5 | 17 | 18 | 19 | 20 | 21 |
22 |

The page you were looking for doesn't exist.

23 |

You may have mistyped the address or the page may have moved.

24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /public/422.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The change you wanted was rejected (422) 5 | 17 | 18 | 19 | 20 | 21 |
22 |

The change you wanted was rejected.

23 |

Maybe you tried to change something you didn't have access to.

24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /public/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | We're sorry, but something went wrong (500) 5 | 17 | 18 | 19 | 20 | 21 |
22 |

We're sorry, but something went wrong.

23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/public/favicon.ico -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file 2 | # 3 | # To ban all spiders from the entire site uncomment the next two lines: 4 | # User-Agent: * 5 | # Disallow: / 6 | -------------------------------------------------------------------------------- /script/format.rb: -------------------------------------------------------------------------------- 1 | # Ad-hoc script to transform Vim documentation 2 | puts File.readlines("en2.txt").map {|line| 3 | #Please keep these lines. -------- 4 | #if /^ {30,}/ =~ line 5 | # last_line += " " + line.strip 6 | #else 7 | # lines << last_line 8 | # last_line = line.chomp 9 | #end 10 | #--------------------------------- 11 | line.sub(/^ +|\|[^|]+\| +/, "") 12 | } 13 | -------------------------------------------------------------------------------- /script/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. 3 | 4 | APP_PATH = File.expand_path('../../config/application', __FILE__) 5 | require File.expand_path('../../config/boot', __FILE__) 6 | require 'rails/commands' 7 | -------------------------------------------------------------------------------- /spec/features/web_pages_spec.rb: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | require 'spec_helper' 3 | 4 | feature 'web pages' do 5 | background do 6 | mode = Mode.create(label: "test") 7 | jp = VimCommand.new(command: ":w", description: "保存", language: "jp") 8 | jp.mode = mode 9 | jp.save! 10 | en = VimCommand.new(command: ":w", description: "Save", language: "en") 11 | en.mode = mode 12 | en.save! 13 | cn = VimCommand.new(command: ":w", description: "你好", language: "cn") 14 | cn.mode = mode 15 | cn.save! 16 | tw = VimCommand.new(command: ":w", description: "你好台湾", language: "tw") 17 | tw.mode = mode 18 | tw.save! 19 | end 20 | scenario "access pages" do 21 | visit root_path 22 | expect(page).to have_content "保存" 23 | 24 | within ".navbar" do 25 | click_link "English" 26 | end 27 | expect(page).to have_content "Save" 28 | 29 | within ".navbar" do 30 | click_link "Chinese(cn)" 31 | end 32 | expect(page).to have_content "你好" 33 | 34 | within ".navbar" do 35 | click_link "Chinese(tw)" 36 | end 37 | expect(page).to have_content "你好台湾" 38 | 39 | within ".navbar" do 40 | click_link "Japanese" 41 | end 42 | expect(page).to have_content "保存" 43 | end 44 | end -------------------------------------------------------------------------------- /spec/models/vim_command_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | describe VimCommand do 4 | describe "::twitter_client" do 5 | let(:env_hash) { 6 | { 7 | "twitter_consumer_key_jp" => "123", 8 | "twitter_consumer_secret_jp" => "456", 9 | "twitter_oauth_token_jp" => "789", 10 | "twitter_oauth_token_secret_jp" => "abc", 11 | } 12 | } 13 | let(:twitter_client) { VimCommand.twitter_client("jp") } 14 | before do 15 | stub_const('ENV', env_hash) 16 | end 17 | specify { expect(twitter_client.instance_variable_get(:@consumer_key)).to eq '123' } 18 | specify { expect(twitter_client.instance_variable_get(:@consumer_secret)).to eq '456' } 19 | specify { expect(twitter_client.instance_variable_get(:@access_token)).to eq '789' } 20 | specify { expect(twitter_client.instance_variable_get(:@access_token_secret)).to eq 'abc' } 21 | it "resnponds to :update" do 22 | expect(twitter_client.respond_to? :update).to be_truthy 23 | end 24 | end 25 | 26 | describe "::update_tweets" do 27 | let(:mode) { Mode.create(label: "test") } 28 | let!(:vim_command) do 29 | VimCommand.new(command: "test command", description: "test desc", language: "jp").tap do |command| 30 | command.mode = mode 31 | command.save! 32 | end 33 | end 34 | 35 | it "updates tweet" do 36 | twitter = double(:twitter) 37 | expect(twitter).to receive(:update).once 38 | allow(VimCommand).to receive(:twitter_client).with("jp").and_return(twitter) 39 | VimCommand.update_tweets("jp", "1", "1", "1") 40 | end 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | # This file is copied to spec/ when you run 'rails generate rspec:install' 2 | ENV["RAILS_ENV"] ||= 'test' 3 | require File.expand_path("../../config/environment", __FILE__) 4 | require 'rspec/rails' 5 | 6 | # Requires supporting ruby files with custom matchers and macros, etc, 7 | # in spec/support/ and its subdirectories. 8 | Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 9 | 10 | RSpec.configure do |config| 11 | config.infer_spec_type_from_file_location! 12 | 13 | # ## Mock Framework 14 | # 15 | # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 16 | # 17 | # config.mock_with :mocha 18 | # config.mock_with :flexmock 19 | # config.mock_with :rr 20 | 21 | # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 22 | config.fixture_path = "#{::Rails.root}/spec/fixtures" 23 | 24 | # If you're not using ActiveRecord, or you'd prefer not to run each of your 25 | # examples within a transaction, remove the following line or assign false 26 | # instead of true. 27 | config.use_transactional_fixtures = true 28 | 29 | # If true, the base class of anonymous controllers will be inferred 30 | # automatically. This will be the default behavior in future versions of 31 | # rspec-rails. 32 | config.infer_base_class_for_anonymous_controllers = false 33 | 34 | # Run specs in random order to surface order dependencies. If you find an 35 | # order dependency and want to debug it, you can fix the order by providing 36 | # the seed, which is printed after each run. 37 | # --seed 1234 38 | config.order = "random" 39 | end 40 | -------------------------------------------------------------------------------- /vendor/assets/javascripts/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/vendor/assets/javascripts/.gitkeep -------------------------------------------------------------------------------- /vendor/assets/stylesheets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/vendor/assets/stylesheets/.gitkeep -------------------------------------------------------------------------------- /vendor/plugins/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vim-tw/be_vimmer/a330c87a54a6910a8066e7c37d6119e1b7eddbc7/vendor/plugins/.gitkeep --------------------------------------------------------------------------------