diff --git a/spec/special_characters_spec.rb b/spec/special_characters_spec.rb
deleted file mode 100644
index ce7810b..0000000
--- a/spec/special_characters_spec.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-describe 'a special character in the buffer' do
-  it 'should be treated like any other character' do
-    with_history('echo "hello*"', 'echo "hello."') do
-      session.send_string('echo "hello*')
-      wait_for { session.content }.to eq('echo "hello*"')
-    end
-
-    with_history('echo "hello?"', 'echo "hello."') do
-      session.send_string('echo "hello?')
-      wait_for { session.content }.to eq('echo "hello?"')
-    end
-
-    with_history('echo "hello\nworld"') do
-      session.send_string('echo "hello\\')
-      wait_for { session.content }.to eq('echo "hello\nworld"')
-    end
-
-    with_history('echo "\\\\"') do
-      session.send_string('echo "\\\\')
-      wait_for { session.content }.to eq('echo "\\\\"')
-    end
-
-    with_history('echo ~/foo') do
-      session.send_string('echo ~')
-      wait_for { session.content }.to eq('echo ~/foo')
-    end
-
-    with_history('echo "$(ls foo)"') do
-      session.send_string('echo "$(')
-      wait_for { session.content }.to eq('echo "$(ls foo)"')
-    end
-
-    with_history('echo "$history[123]"') do
-      session.send_string('echo "$history[')
-      wait_for { session.content }.to eq('echo "$history[123]"')
-      session.send_string('123]')
-      wait_for { session.content }.to eq('echo "$history[123]"')
-    end
-
-    with_history('echo "#yolo"') do
-      session.send_string('echo "#')
-      wait_for { session.content }.to eq('echo "#yolo"')
-    end
-
-    with_history('echo "#foo"', 'echo $#abc') do
-      session.send_string('echo "#')
-      wait_for { session.content }.to eq('echo "#foo"')
-    end
-
-    with_history('echo "^A"', 'echo "^B"') do
-      session.send_string('echo "^A')
-      wait_for { session.content }.to eq('echo "^A"')
-    end
-
-    with_history('-foo() {}') do
-      session.send_string('-')
-      wait_for { session.content }.to eq('-foo() {}')
-    end
-  end
-end
diff --git a/spec/strategies/default_spec.rb b/spec/strategies/default_spec.rb
index 94f3450..89321f3 100644
--- a/spec/strategies/default_spec.rb
+++ b/spec/strategies/default_spec.rb
@@ -1,3 +1,5 @@
+require 'strategies/special_characters_helper'
+
 describe 'the default suggestion strategy' do
   it 'suggests the last matching history entry' do
     with_history('ls foo', 'ls bar', 'echo baz') do
@@ -5,4 +7,6 @@ describe 'the default suggestion strategy' do
       wait_for { session.content }.to eq('ls bar')
     end
   end
+
+  include_examples 'special characters'
 end
diff --git a/spec/strategies/match_prev_cmd_spec.rb b/spec/strategies/match_prev_cmd_spec.rb
index 21be712..f1596ba 100644
--- a/spec/strategies/match_prev_cmd_spec.rb
+++ b/spec/strategies/match_prev_cmd_spec.rb
@@ -1,3 +1,5 @@
+require 'strategies/special_characters_helper'
+
 describe 'the match_prev_cmd strategy' do
   let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd'] }
 
@@ -14,4 +16,6 @@ describe 'the match_prev_cmd strategy' do
       wait_for { session.content }.to eq('ls bar')
     end
   end
+
+  include_examples 'special characters'
 end
diff --git a/spec/strategies/special_characters_helper.rb b/spec/strategies/special_characters_helper.rb
new file mode 100644
index 0000000..8771861
--- /dev/null
+++ b/spec/strategies/special_characters_helper.rb
@@ -0,0 +1,62 @@
+shared_examples 'special characters' do
+  describe 'a special character in the buffer' do
+    it 'should be treated like any other character' do
+      with_history('echo "hello*"', 'echo "hello."') do
+        session.send_string('echo "hello*')
+        wait_for { session.content }.to eq('echo "hello*"')
+      end
+
+      with_history('echo "hello?"', 'echo "hello."') do
+        session.send_string('echo "hello?')
+        wait_for { session.content }.to eq('echo "hello?"')
+      end
+
+      with_history('echo "hello\nworld"') do
+        session.send_string('echo "hello\\')
+        wait_for { session.content }.to eq('echo "hello\nworld"')
+      end
+
+      with_history('echo "\\\\"') do
+        session.send_string('echo "\\\\')
+        wait_for { session.content }.to eq('echo "\\\\"')
+      end
+
+      with_history('echo ~/foo') do
+        session.send_string('echo ~')
+        wait_for { session.content }.to eq('echo ~/foo')
+      end
+
+      with_history('echo "$(ls foo)"') do
+        session.send_string('echo "$(')
+        wait_for { session.content }.to eq('echo "$(ls foo)"')
+      end
+
+      with_history('echo "$history[123]"') do
+        session.send_string('echo "$history[')
+        wait_for { session.content }.to eq('echo "$history[123]"')
+        session.send_string('123]')
+        wait_for { session.content }.to eq('echo "$history[123]"')
+      end
+
+      with_history('echo "#yolo"') do
+        session.send_string('echo "#')
+        wait_for { session.content }.to eq('echo "#yolo"')
+      end
+
+      with_history('echo "#foo"', 'echo $#abc') do
+        session.send_string('echo "#')
+        wait_for { session.content }.to eq('echo "#foo"')
+      end
+
+      with_history('echo "^A"', 'echo "^B"') do
+        session.send_string('echo "^A')
+        wait_for { session.content }.to eq('echo "^A"')
+      end
+
+      with_history('-foo() {}') do
+        session.send_string('-')
+        wait_for { session.content }.to eq('-foo() {}')
+      end
+    end
+  end
+end
diff --git a/src/strategies/match_prev_cmd.zsh b/src/strategies/match_prev_cmd.zsh
index ee26346..5693098 100644
--- a/src/strategies/match_prev_cmd.zsh
+++ b/src/strategies/match_prev_cmd.zsh
@@ -26,7 +26,7 @@ _zsh_autosuggest_strategy_match_prev_cmd() {
 	# Get all history event numbers that correspond to history
 	# entries that match pattern $prefix*
 	local history_match_keys
-	history_match_keys=(${(k)history[(R)$prefix*]})
+	history_match_keys=(${(k)history[(R)${(b)prefix}*]})
 
 	# By default we use the first history number (most recent history entry)
 	local histkey="${history_match_keys[1]}"
diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh
index 9ea5960..5391c2b 100644
--- a/zsh-autosuggestions.zsh
+++ b/zsh-autosuggestions.zsh
@@ -533,7 +533,7 @@ _zsh_autosuggest_strategy_match_prev_cmd() {
 	# Get all history event numbers that correspond to history
 	# entries that match pattern $prefix*
 	local history_match_keys
-	history_match_keys=(${(k)history[(R)$prefix*]})
+	history_match_keys=(${(k)history[(R)${(b)prefix}*]})
 
 	# By default we use the first history number (most recent history entry)
 	local histkey="${history_match_keys[1]}"