diff --git a/src/keymap.rs b/src/keymap.rs
index 13307cdf443585213fc7e6f70f5394b02b26c96b..11e951e95ab32a0f129550753f2beba2d1c4f9f0 100644
--- a/src/keymap.rs
+++ b/src/keymap.rs
@@ -166,7 +166,7 @@ pub enum Anchor {
 }
 
 /// Vi character search
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, Clone, PartialEq, Copy)]
 pub enum CharSearch {
     Forward(char),
     // until
@@ -222,8 +222,8 @@ impl Movement {
             Movement::ForwardWord(previous, at, word) => {
                 Movement::ForwardWord(repeat_count(previous, new), at, word)
             }
-            Movement::ViCharSearch(previous, ref char_search) => {
-                Movement::ViCharSearch(repeat_count(previous, new), char_search.clone())
+            Movement::ViCharSearch(previous, char_search) => {
+                Movement::ViCharSearch(repeat_count(previous, new), char_search)
             }
             Movement::BackwardChar(previous) => Movement::BackwardChar(repeat_count(previous, new)),
             Movement::ForwardChar(previous) => Movement::ForwardChar(repeat_count(previous, new)),
@@ -555,7 +555,7 @@ impl InputState {
             }
             KeyPress::Char(';') => {
                 match self.last_char_search {
-                    Some(ref cs) => Cmd::Move(Movement::ViCharSearch(n, cs.clone())),
+                    Some(cs) => Cmd::Move(Movement::ViCharSearch(n, cs)),
                     None => Cmd::Noop,
                 }
             }
@@ -709,7 +709,7 @@ impl InputState {
                 }
             }
             KeyPress::Char(';') => match self.last_char_search {
-                Some(ref cs) => Some(Movement::ViCharSearch(n, cs.clone())),
+                Some(cs) => Some(Movement::ViCharSearch(n, cs)),
                 None => None,
             },
             KeyPress::Char(',') => match self.last_char_search {
@@ -755,7 +755,7 @@ impl InputState {
                     'T' => CharSearch::BackwardAfter(ch),
                     _ => unreachable!(),
                 };
-                self.last_char_search = Some(cs.clone());
+                self.last_char_search = Some(cs);
                 Some(cs)
             }
             _ => None,
diff --git a/src/line_buffer.rs b/src/line_buffer.rs
index f914d467451c09b5e03ebde82de5be981956220a..cc0d41d140408744d8cadc1c0753a15163f45d59 100644
--- a/src/line_buffer.rs
+++ b/src/line_buffer.rs
@@ -12,6 +12,7 @@ use unicode_segmentation::UnicodeSegmentation;
 pub static MAX_LINE: usize = 4096;
 
 /// Word's case change
+#[derive(Clone, Copy)]
 pub enum WordAction {
     CAPITALIZE,
     LOWERCASE,
diff --git a/src/tty/unix.rs b/src/tty/unix.rs
index cd7fec625e4270320665553a04ccbfb8f3e61090..fb205f91922f62f7218c43a30376ecf95c0c2160 100644
--- a/src/tty/unix.rs
+++ b/src/tty/unix.rs
@@ -30,7 +30,7 @@ fn get_win_size() -> (usize, usize) {
 
     unsafe {
         let mut size: libc::winsize = zeroed();
-        match libc::ioctl(STDOUT_FILENO, libc::TIOCGWINSZ.into(), &mut size) {
+        match libc::ioctl(STDOUT_FILENO, libc::TIOCGWINSZ.into(), &mut size) { // .into() for FreeBSD
             0 => (size.ws_col as usize, size.ws_row as usize), // TODO getCursorPosition
             _ => (80, 24),
         }
@@ -323,7 +323,7 @@ impl RawReader for PosixRawReader {
             let s = try!(std::str::from_utf8(&self.buf[..width]));
             Ok(s.chars().next().unwrap())
         } else {
-            return Ok(first as char);
+            Ok(first as char)
         }
     }
 }