vimdb 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +5 -0
- data/README.md +12 -5
- data/Rakefile +1 -0
- data/lib/vimdb/commands.rb +3 -3
- data/lib/vimdb/item.rb +14 -2
- data/lib/vimdb/keys.rb +33 -12
- data/lib/vimdb/options.rb +1 -1
- data/lib/vimdb/runner.rb +9 -9
- data/lib/vimdb/user.rb +7 -6
- data/lib/vimdb/version.rb +1 -1
- data/spec/.vimdbrc +1 -1
- data/spec/commands_spec.rb +7 -0
- data/spec/common_search_options_spec.rb +36 -0
- data/spec/keys_spec.rb +49 -25
- metadata +3 -2
data/CHANGELOG.rdoc
CHANGED
data/README.md
CHANGED
@@ -31,6 +31,9 @@ Usage
|
|
31
31
|
# List keys with Leader
|
32
32
|
$ vimdb keys L-
|
33
33
|
|
34
|
+
# List keys with no Leader - not of last search
|
35
|
+
$ vimdb keys L- -n
|
36
|
+
|
34
37
|
# List insert mode keys
|
35
38
|
$ vimdb keys -m=i
|
36
39
|
|
@@ -51,8 +54,8 @@ Usage
|
|
51
54
|
# List options that contain window in description
|
52
55
|
$ vimdb opts window -f=desc
|
53
56
|
|
54
|
-
# List commands
|
55
|
-
$ vimdb commands buffer -
|
57
|
+
# List commands mentioning 'buffer' in any field
|
58
|
+
$ vimdb commands buffer -a
|
56
59
|
|
57
60
|
# Info about how vim items were made
|
58
61
|
$ vimdb info keys
|
@@ -61,6 +64,13 @@ Usage
|
|
61
64
|
# For more
|
62
65
|
$ vimdb help
|
63
66
|
|
67
|
+
Configuration
|
68
|
+
=============
|
69
|
+
|
70
|
+
Configure vimdb with a ~/.vimdbrc, which is loaded before every command request. Use it to define
|
71
|
+
additional commands. For an example, [see my rc
|
72
|
+
file](https://github.com/cldwalker/dotfiles/blob/master/.vimdbrc).
|
73
|
+
|
64
74
|
Key Modes
|
65
75
|
=========
|
66
76
|
|
@@ -94,8 +104,5 @@ Contributing
|
|
94
104
|
Todo
|
95
105
|
====
|
96
106
|
|
97
|
-
* Fix test coupling
|
98
|
-
* More tests!
|
99
|
-
* Fix keys - index.txt edge cases
|
100
107
|
* Add support for more vim items - variables, functions
|
101
108
|
* Considering user annotation for vim items
|
data/Rakefile
CHANGED
data/lib/vimdb/commands.rb
CHANGED
@@ -48,8 +48,8 @@ class Vimdb::Commands < Vimdb::Item
|
|
48
48
|
cmd = {}
|
49
49
|
|
50
50
|
cmd[:file] = arr[1].to_s[%r{Last set from (\S+)}, 1] or next
|
51
|
-
|
52
|
-
cmd[:from]
|
51
|
+
match = cmd[:file].to_s.match(%r{/#{@plugins_dir}/(?<plugin>[^/]+)})
|
52
|
+
cmd[:from] = match ? match[:plugin] + ' plugin' : 'user'
|
53
53
|
cmd[:name] = arr[0][/^(?:[!b" ]+)(\S+)/, 1]
|
54
54
|
cmd[:desc] = arr[0][/^(?:[!b" ]+)\S+\s*(.*)$/, 1]
|
55
55
|
if cmd[:desc][/^(\*|\+|\?|\d)\s+(\dc?|%|\.)?\s*(#{completions})?\s*(.*)/]
|
@@ -60,7 +60,7 @@ class Vimdb::Commands < Vimdb::Item
|
|
60
60
|
end.compact
|
61
61
|
end
|
62
62
|
|
63
|
-
def
|
63
|
+
def fields
|
64
64
|
[:name, :alias, :from, :desc]
|
65
65
|
end
|
66
66
|
|
data/lib/vimdb/item.rb
CHANGED
@@ -24,7 +24,15 @@ module Vimdb
|
|
24
24
|
if query
|
25
25
|
query = Regexp.escape(query) unless options[:regexp]
|
26
26
|
regex = Regexp.new(query, options[:ignore_case])
|
27
|
-
|
27
|
+
|
28
|
+
if options[:all]
|
29
|
+
items.select! {|item|
|
30
|
+
fields.any? {|field| item[field] =~ regex }
|
31
|
+
}
|
32
|
+
else
|
33
|
+
search_field = options[:field] ? options[:field].to_sym : default_field
|
34
|
+
items.select! {|item| item[search_field] =~ regex }
|
35
|
+
end
|
28
36
|
end
|
29
37
|
items
|
30
38
|
end
|
@@ -42,10 +50,14 @@ module Vimdb
|
|
42
50
|
raise NotImplementedError
|
43
51
|
end
|
44
52
|
|
45
|
-
def
|
53
|
+
def fields
|
46
54
|
raise NotImplementedError
|
47
55
|
end
|
48
56
|
|
57
|
+
def default_field
|
58
|
+
fields[0]
|
59
|
+
end
|
60
|
+
|
49
61
|
private
|
50
62
|
|
51
63
|
def vim(*cmds)
|
data/lib/vimdb/keys.rb
CHANGED
@@ -31,7 +31,7 @@ class Vimdb::Keys < Vimdb::Item
|
|
31
31
|
"Created using index.txt and :map"
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
34
|
+
def fields
|
35
35
|
[:key, :mode, :from, :desc]
|
36
36
|
end
|
37
37
|
|
@@ -70,22 +70,43 @@ class Vimdb::Keys < Vimdb::Item
|
|
70
70
|
#drop section header
|
71
71
|
section_lines = section_lines.drop_while {|e| e !~ /^\|/ }
|
72
72
|
|
73
|
-
section_lines.each do |
|
74
|
-
cols =
|
73
|
+
section_lines.each do |line|
|
74
|
+
cols = line.split(/\t+/)
|
75
75
|
if cols.size >= 3
|
76
|
-
|
77
|
-
keys <<
|
78
|
-
|
79
|
-
elsif cols.size == 2
|
80
|
-
|
81
|
-
|
82
|
-
|
76
|
+
desc = cols[-1] == '"' ? keys[-1][:desc] : cols[-1]
|
77
|
+
keys << create_index_key(mode, cols[-2], desc)
|
78
|
+
keys.pop if keys[-1][:desc] == 'not used'
|
79
|
+
elsif cols.size == 2
|
80
|
+
# add desc from following lines
|
81
|
+
if cols[0] == ''
|
82
|
+
if cols[1] !~ /^(Meta characters|not used)/
|
83
|
+
keys[-1][:desc] += ' ' + cols[1].strip
|
84
|
+
end
|
85
|
+
else
|
86
|
+
keys << create_index_key(mode, cols[1])
|
87
|
+
end
|
88
|
+
elsif cols.size == 1
|
89
|
+
tag, key = line.split(/\s+/, 2)
|
90
|
+
if tag == '|i_CTRL-V_digit|'
|
91
|
+
key, desc = key.split(/(?<=})/)
|
92
|
+
keys << create_index_key(mode, key, desc)
|
93
|
+
elsif tag == '|CTRL-W_g_CTRL-]|'
|
94
|
+
key, desc = key.split(/(?<=\])/)
|
95
|
+
keys << create_index_key(mode, key, desc)
|
96
|
+
else
|
97
|
+
keys << create_index_key(mode, key)
|
98
|
+
end
|
83
99
|
end
|
84
100
|
end
|
85
101
|
end
|
86
102
|
keys
|
87
103
|
end
|
88
104
|
|
105
|
+
def create_index_key(mode, key, desc = nil)
|
106
|
+
desc = desc ? desc.strip : ''
|
107
|
+
{ mode: mode, key: translate_index_key(key), desc: desc, from: 'default' }
|
108
|
+
end
|
109
|
+
|
89
110
|
def translate_index_key(key)
|
90
111
|
key.gsub(/CTRL-(\S)/) {|s| "C-#{$1.downcase}" }
|
91
112
|
end
|
@@ -103,8 +124,8 @@ class Vimdb::Keys < Vimdb::Item
|
|
103
124
|
key = {}
|
104
125
|
|
105
126
|
key[:file] = arr[1].to_s[%r{Last set from (\S+)}, 1] or next
|
106
|
-
|
107
|
-
key[:from]
|
127
|
+
match = key[:file].to_s.match(%r{/#{@plugins_dir}/(?<plugin>[^/]+)})
|
128
|
+
key[:from] = match ? match[:plugin] + ' plugin' : 'user'
|
108
129
|
|
109
130
|
key[:key] = arr[0][/^\S*\s+(\S+)/, 1]
|
110
131
|
next if key[:key][/^(<Plug>|<SNR>)/]
|
data/lib/vimdb/options.rb
CHANGED
data/lib/vimdb/runner.rb
CHANGED
@@ -13,16 +13,18 @@ class Vimdb::Runner < Thor
|
|
13
13
|
super
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.
|
16
|
+
def self.common_search_options
|
17
17
|
method_option :reload, :type => :boolean, :desc => 'reloads items'
|
18
18
|
method_option :sort, :type => :string, :desc => 'sort by field', :aliases => '-s'
|
19
19
|
method_option :reverse_sort, :type => :boolean, :aliases => '-R'
|
20
20
|
method_option :ignore_case, :type => :boolean, :aliases => '-i'
|
21
21
|
method_option :regexp, :type => :boolean, :aliases => '-r', :desc => 'query is a regexp'
|
22
|
+
method_option :not, :type => :boolean, :aliases => '-n', :desc => 'return non-matching results'
|
23
|
+
method_option :all, :type => :boolean, :aliases => '-a', :desc => 'search all fields'
|
24
|
+
method_option :field, :type => :string, :desc => 'field to query', :aliases => '-f'
|
22
25
|
end
|
23
26
|
|
24
|
-
|
25
|
-
method_option :field, :default => 'key', :desc => 'field to query', :aliases => '-f'
|
27
|
+
common_search_options
|
26
28
|
method_option :mode, :type => :string, :desc => 'search by mode, multiple modes are ORed', :aliases => '-m'
|
27
29
|
desc 'keys [QUERY]', 'List vim keys'
|
28
30
|
def keys(query = nil)
|
@@ -30,23 +32,21 @@ class Vimdb::Runner < Thor
|
|
30
32
|
search_item(query)
|
31
33
|
end
|
32
34
|
|
33
|
-
|
34
|
-
method_option :field, :default => 'name', :desc => 'field to query', :aliases => '-f'
|
35
|
+
common_search_options
|
35
36
|
desc 'opts [QUERY]', 'List vim options'
|
36
37
|
def opts(query = nil)
|
37
38
|
Vimdb.item('options')
|
38
39
|
search_item(query)
|
39
40
|
end
|
40
41
|
|
41
|
-
|
42
|
-
method_option :field, :default => 'name', :desc => 'field to query', :aliases => '-f'
|
42
|
+
common_search_options
|
43
43
|
desc 'commands [QUERY]', 'List vim commands'
|
44
44
|
def commands(query = nil)
|
45
45
|
Vimdb.item('commands')
|
46
46
|
search_item(query)
|
47
47
|
end
|
48
48
|
|
49
|
-
desc 'info', 'Prints info about an item'
|
49
|
+
desc 'info [ITEM]', 'Prints info about an item'
|
50
50
|
def info(item = nil)
|
51
51
|
puts Vimdb.item(item).info
|
52
52
|
end
|
@@ -55,6 +55,6 @@ class Vimdb::Runner < Thor
|
|
55
55
|
def search_item(query = nil)
|
56
56
|
Vimdb.user.reload if options[:reload]
|
57
57
|
keys = Vimdb.user.search(query, options)
|
58
|
-
puts Hirb::Helpers::Table.render(keys, fields: Vimdb.item.
|
58
|
+
puts Hirb::Helpers::Table.render(keys, fields: Vimdb.item.fields)
|
59
59
|
end
|
60
60
|
end
|
data/lib/vimdb/user.rb
CHANGED
@@ -2,24 +2,25 @@ module Vimdb
|
|
2
2
|
class User
|
3
3
|
def initialize(item, db)
|
4
4
|
@item, @db = item, db
|
5
|
-
@
|
5
|
+
@reload = !File.exists?(@db.file)
|
6
6
|
end
|
7
7
|
|
8
8
|
def items
|
9
|
-
|
10
|
-
@db.set(@item.key, @item.create).tap { @
|
9
|
+
!@reload && @db.get(@item.key) ||
|
10
|
+
@db.set(@item.key, @item.create).tap { @reload = false }
|
11
11
|
end
|
12
12
|
|
13
13
|
def search(query, options = {})
|
14
|
-
results = @item.search(items, query, options)
|
15
|
-
|
14
|
+
results = @item.search(items.dup, query, options)
|
15
|
+
results = items - results if options[:not]
|
16
|
+
sort = options[:sort] || options[:field] || @item.default_field
|
16
17
|
results.sort_by! {|e| e[sort.to_sym] || '' }
|
17
18
|
results.reverse! if options[:reverse_sort]
|
18
19
|
results
|
19
20
|
end
|
20
21
|
|
21
22
|
def reload
|
22
|
-
@
|
23
|
+
@reload = true
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
data/lib/vimdb/version.rb
CHANGED
data/spec/.vimdbrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Vimdb.plugins_dir = 'plugins'
|
1
|
+
Vimdb.plugins_dir = '(plugins|autoload)'
|
data/spec/commands_spec.rb
CHANGED
@@ -43,6 +43,13 @@ STR
|
|
43
43
|
vimdb 'commands', 'Gist'
|
44
44
|
stdout.must_include <<-STR
|
45
45
|
| Gist | | gist-vim plugin | :call Gist(<line1>, <line2>, <f-args>) |
|
46
|
+
STR
|
47
|
+
end
|
48
|
+
|
49
|
+
it "lists plugin commands using plugin_dir regexp correctly" do
|
50
|
+
vimdb 'commands', 'Vopen'
|
51
|
+
stdout.must_include <<-STR
|
52
|
+
| Vopen | | pathogen.vim plugin | :execute s:find(<count>,'edit<bang>',<q-args>,1) |
|
46
53
|
STR
|
47
54
|
end
|
48
55
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
|
3
|
+
describe "common search options" do
|
4
|
+
it "with --field option searches another field" do
|
5
|
+
vimdb 'keys', 'L-z' ,'-f=desc'
|
6
|
+
stdout.must_match /^0 rows/
|
7
|
+
end
|
8
|
+
|
9
|
+
it "with --reverse_sort option reverse sorts field" do
|
10
|
+
vimdb 'keys', '-R'
|
11
|
+
stdout.must_match /gq.*'\]/m
|
12
|
+
end
|
13
|
+
|
14
|
+
it "with --regexp option converts search to regexp" do
|
15
|
+
vimdb 'keys', '^C-', '-r'
|
16
|
+
stdout.wont_match /^0 rows/
|
17
|
+
stdout.must_match /C-a.*C-z/m
|
18
|
+
end
|
19
|
+
|
20
|
+
it "with --ignore-case option ignores case" do
|
21
|
+
vimdb 'keys', 'Q:', '-i'
|
22
|
+
stdout.must_match /q:.*1 row/m
|
23
|
+
end
|
24
|
+
|
25
|
+
it "with --not option returns all non-matching results" do
|
26
|
+
vimdb 'keys', 'blarg', '-n'
|
27
|
+
stdout.must_match /928 rows/
|
28
|
+
end
|
29
|
+
|
30
|
+
it "with --all option searches all fields" do
|
31
|
+
vimdb 'keys', 'C', '-a'
|
32
|
+
stdout.must_match /365 rows/
|
33
|
+
# from desc field
|
34
|
+
stdout.must_include ' :TComment<CR>'
|
35
|
+
end
|
36
|
+
end
|
data/spec/keys_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '/helper')
|
|
3
3
|
describe "vimdb keys" do
|
4
4
|
it "lists all keys by default" do
|
5
5
|
vimdb 'keys'
|
6
|
-
stdout.must_match /
|
6
|
+
stdout.must_match /928 rows/
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'searches :key field by default' do
|
@@ -11,27 +11,6 @@ describe "vimdb keys" do
|
|
11
11
|
stdout.must_match /1 row/
|
12
12
|
end
|
13
13
|
|
14
|
-
it "with --field option searches another field" do
|
15
|
-
vimdb 'keys', 'L-z' ,'-f=desc'
|
16
|
-
stdout.must_match /0 rows/
|
17
|
-
end
|
18
|
-
|
19
|
-
it "with --reverse_sort option reverse sorts field" do
|
20
|
-
vimdb 'keys', '-R'
|
21
|
-
stdout.must_match /gq.*'\]/m
|
22
|
-
end
|
23
|
-
|
24
|
-
it "with --regexp option converts search to regexp" do
|
25
|
-
vimdb 'keys', '^C-', '-r'
|
26
|
-
stdout.wont_match /0 rows/
|
27
|
-
stdout.must_match /C-a.*C-z/m
|
28
|
-
end
|
29
|
-
|
30
|
-
it "with --ignore-case option ignores case" do
|
31
|
-
vimdb 'keys', 'Q:', '-i'
|
32
|
-
stdout.must_match /q:.*1 row/m
|
33
|
-
end
|
34
|
-
|
35
14
|
it 'with --mode option ANDs mode to search' do
|
36
15
|
vimdb 'keys', 'gm', '-m=n'
|
37
16
|
stdout.must_match /1 row/
|
@@ -40,13 +19,13 @@ describe "vimdb keys" do
|
|
40
19
|
describe "edge cases" do
|
41
20
|
it "converts control key to C-" do
|
42
21
|
vimdb 'keys', 'C-z'
|
43
|
-
stdout.wont_match
|
22
|
+
stdout.wont_match /^0 rows/
|
44
23
|
stdout.must_match /C-z/
|
45
24
|
end
|
46
25
|
|
47
26
|
it "converts escape key to E-" do
|
48
27
|
vimdb 'keys', 'E-x'
|
49
|
-
stdout.wont_match
|
28
|
+
stdout.wont_match /^0 rows/
|
50
29
|
stdout.must_match /E-x/
|
51
30
|
end
|
52
31
|
|
@@ -74,7 +53,52 @@ describe "vimdb keys" do
|
|
74
53
|
|
75
54
|
it "doesn't list Plug keys" do
|
76
55
|
vimdb 'keys', 'Plug'
|
77
|
-
stdout.must_match
|
56
|
+
stdout.must_match /^0 rows/
|
57
|
+
end
|
58
|
+
|
59
|
+
it "doesn't list not used keys" do
|
60
|
+
vimdb 'keys', '^not used$', '-f=desc', '-r'
|
61
|
+
stdout.must_match /^0 rows/
|
62
|
+
end
|
63
|
+
|
64
|
+
it "lists keys with description on following line" do
|
65
|
+
vimdb 'keys', 'digraph', '-a'
|
66
|
+
stdout.must_include <<-STR
|
67
|
+
| {char1}<BS>{char2} | i | default | enter digraph (only when 'digraph' option set) |
|
68
|
+
STR
|
69
|
+
end
|
70
|
+
|
71
|
+
it "lists keys with no tabs and no description" do
|
72
|
+
vimdb 'keys', 'C-r C-r'
|
73
|
+
stdout.must_include <<-STR
|
74
|
+
| C-r C-r {0-9a-z"%#*:=} | i | default | insert the contents of a register literally |
|
75
|
+
STR
|
76
|
+
end
|
77
|
+
|
78
|
+
it "lists keys with no tabs but a description" do
|
79
|
+
vimdb 'keys', 'C-v {number}'
|
80
|
+
stdout.must_include <<-STR
|
81
|
+
| C-v {number} | i | default | insert three digit decimal number as a single byte. |
|
82
|
+
STR
|
83
|
+
|
84
|
+
vimdb 'keys', 'C-w g C-]'
|
85
|
+
stdout.must_include <<-STR
|
86
|
+
| C-w g C-] | n | default | split window and do |:tjump| to tag under cursor |
|
87
|
+
STR
|
88
|
+
end
|
89
|
+
|
90
|
+
it "lists key without unrelated sentences after it" do
|
91
|
+
vimdb 'keys', 'delete character under', '-a'
|
92
|
+
stdout.must_include <<-STR
|
93
|
+
| <Del> | i | default | delete character under the cursor |
|
94
|
+
STR
|
95
|
+
end
|
96
|
+
|
97
|
+
it "lists keys correctly that have desc from previous key" do
|
98
|
+
vimdb 'keys', '2$', '-r'
|
99
|
+
stdout.must_include <<-STR
|
100
|
+
| 2 | n | default | prepend to command to give a count |
|
101
|
+
STR
|
78
102
|
end
|
79
103
|
end
|
80
104
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: vimdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Gabriel Horner
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-11-07 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/vimdb/version.rb
|
67
67
|
- lib/vimdb.rb
|
68
68
|
- spec/commands_spec.rb
|
69
|
+
- spec/common_search_options_spec.rb
|
69
70
|
- spec/helper.rb
|
70
71
|
- spec/keys_spec.rb
|
71
72
|
- spec/options_spec.rb
|