diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 9bd6bb8f..3111900d 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -284,6 +284,15 @@ pub fn extend_line_down(cx: &mut Context) {
     doc.set_selection(selection);
 }
 
+pub fn select_all(cx: &mut Context) {
+    let doc = cx.doc();
+
+    doc.set_selection(Selection::single(
+        0,
+        doc.text().len_chars().saturating_sub(1),
+    ))
+}
+
 pub fn select_regex(cx: &mut Context) {
     let prompt = ui::regex_prompt(cx, "select:".to_string(), |doc, regex| {
         let text = &doc.text().slice(..);
diff --git a/helix-term/src/keymap.rs b/helix-term/src/keymap.rs
index efc72b60..69c71d23 100644
--- a/helix-term/src/keymap.rs
+++ b/helix-term/src/keymap.rs
@@ -164,7 +164,8 @@ pub fn default() -> Keymaps {
                 vec![shift!('S')] => commands::split_selection,
                 vec![key!(';')] => commands::collapse_selection,
                 // TODO should be alt(;)
-                vec![key!('%')] => commands::flip_selections,
+                vec![alt!(';')] => commands::flip_selections,
+                vec![key!('%')] => commands::select_all,
                 vec![key!('x')] => commands::select_line,
                 vec![key!('u')] => commands::undo,
                 vec![shift!('U')] => commands::redo,